Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2023
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/socket.h>
  6. #include <arpa/inet.h>
  7. #include <poll.h>
  8. #include <fcntl.h>
  9. #include <errno.h>
  10. #include "helper.h"
  11.  
  12. #define PORT 8080
  13.  
  14. int main() {
  15.     int sock = 0, valread;
  16.     struct sockaddr_in serv_addr;
  17.     struct message msg;
  18.  
  19.     // Create socket
  20.     if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  21.         perror("socket failed");
  22.         exit(EXIT_FAILURE);
  23.     }
  24.    
  25.     // Set socket to non-blocking mode
  26.     int flags = fcntl(sock, F_GETFL, 0);
  27.     if (flags == -1) {
  28.         perror("fcntl failed");
  29.         exit(EXIT_FAILURE);
  30.     }
  31.     if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) {
  32.         perror("fcntl failed");
  33.         exit(EXIT_FAILURE);
  34.     }
  35.  
  36.     // Set up server address
  37.     serv_addr.sin_family = AF_INET;
  38.     serv_addr.sin_port = htons(PORT);
  39.     if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
  40.         perror("inet_pton failed");
  41.         exit(EXIT_FAILURE);
  42.     }
  43.  
  44.     // Connect to server
  45.     if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
  46.         if (errno != EINPROGRESS) {
  47.             perror("connect failed");
  48.             exit(EXIT_FAILURE);
  49.         }
  50.     }
  51.  
  52.     // Use poll to wait for connection
  53.     struct pollfd fds[1];
  54.     fds[0].fd = sock;
  55.     fds[0].events = POLLOUT;
  56.     if (poll(fds, 1, -1) <= 0) {
  57.         perror("poll failed");
  58.         exit(EXIT_FAILURE);
  59.     }
  60.     if (!(fds[0].revents & POLLOUT)) {
  61.         perror("connect failed");
  62.         exit(EXIT_FAILURE);
  63.     }
  64.  
  65.     // Receive message from server
  66.     while ((valread = read(sock, &msg, sizeof(msg))) == -1 && errno == EAGAIN);
  67.     if (valread == -1) {
  68.         perror("read failed");
  69.         exit(EXIT_FAILURE);
  70.     }
  71.     printf("ID: %d\n", msg.id);
  72.     printf("Data: %s\n",msg.data);
  73.  
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement