Advertisement
printesoi

Simple server

May 14th, 2014
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.34 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7.  
  8. #define DIE(assertion, msg) \
  9.      if (assertion ) { perror(msg); exit(EXIT_FAILURE); }
  10.  
  11. int main()
  12. {
  13.     struct sockaddr_in addr, raddr;
  14.     int optval = 1, rc, fd, peerfd;
  15.     unsigned rlen = sizeof(raddr);
  16.     char send_buffer[] = "Mumu mimi meme mama";
  17.     char recv_buffer[100];
  18.    
  19.     fd = socket(AF_INET, SOCK_STREAM, 0);
  20.     DIE(fd < 0, "socket");
  21.  
  22.     rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
  23.     DIE (rc < 0, "setsockopt");
  24.  
  25.     addr.sin_family = AF_INET;
  26.     addr.sin_port = htons(8888);
  27.     addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
  28.     rc = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
  29.     DIE(rc < 0, "bind");
  30.  
  31.     rc = listen(fd, 5);
  32.     DIE(rc < 0, "listen");
  33.  
  34.     printf("[SERVER] Now wait for a client...\n");
  35.     peerfd = accept(fd, (struct sockaddr *)&raddr, &rlen);
  36.     DIE(peerfd < 0, "accept");
  37.    
  38.     printf("[SERVER] Client connected. Read something..\n");
  39.     rc = recv(peerfd, recv_buffer, sizeof(recv_buffer) - 1, 0);
  40.     DIE(rc < 0, "recv");
  41.  
  42.     recv_buffer[rc] = 0;
  43.     printf("[SERVER] Received %s. Now sleep 20s\n", recv_buffer);
  44.  
  45.     sleep(20);
  46.  
  47.     rc = send(peerfd, send_buffer, sizeof(send_buffer), 0);
  48.     DIE(rc < 0, "send");
  49.     printf("[SERVER] send returned %d\n", rc);
  50.  
  51.     return close(fd);
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement