Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Server

By: a guest on Oct 10th, 2012  |  syntax: None  |  size: 1.88 KB  |  views: 61  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /* A simple server in the internet domain using TCP
  2.    The port number is passed as an argument */
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <unistd.h>
  7. #include <sys/types.h>
  8. #include <sys/uio.h>
  9. #include <sys/socket.h>
  10. #include <netinet/in.h>
  11. #include <errno.h>
  12.  
  13. void error(const char *msg)
  14. {
  15.     perror(msg);
  16.     exit(1);
  17. }
  18.  
  19. int main(int argc, char *argv[])
  20. {
  21.         int sockfd, newsockfd, portno;
  22.         socklen_t clilen;
  23.         struct sockaddr_in serv_addr, cli_addr;
  24.         int n;
  25.         ssize_t recv;
  26.         struct msghdr mh;
  27.         struct iovec iov[1];
  28.        
  29.         char primo[256];
  30.        
  31.         memset(&mh, 0, sizeof(mh));
  32.         memset(iov,  0, sizeof(iov));
  33.        
  34.         /* Specify the components of the message in an "iovec".*/
  35.         iov[0] .iov_base = primo;                      
  36.         iov[0] .iov_len = sizeof(primo);
  37.        
  38.         /*set iov in mh*/
  39.         mh.msg_iov = iov;
  40.         mh.msg_iovlen = 1;
  41.        
  42.         printf("Structures initialized \n");
  43.  
  44.         if (argc < 2) {
  45.          fprintf(stderr,"ERROR, no port provided\n");
  46.          exit(1);
  47.         }
  48.         sockfd = socket(AF_INET, SOCK_STREAM, 0);
  49.         if (sockfd < 0)
  50.                 error("ERROR opening socket");
  51.         bzero((char *) &serv_addr, sizeof(serv_addr));
  52.         portno = atoi(argv[1]);
  53.         serv_addr.sin_family = AF_INET;
  54.         serv_addr.sin_addr.s_addr = INADDR_ANY;
  55.         serv_addr.sin_port = htons(portno);
  56.         if (bind(sockfd, (struct sockaddr *) &serv_addr,
  57.                   sizeof(serv_addr)) < 0)
  58.                   error("ERROR on binding");             
  59.         listen(sockfd,500);
  60.         clilen = sizeof(cli_addr);
  61.         newsockfd = accept(sockfd,
  62.                          (struct sockaddr *) &cli_addr,
  63.                          &clilen);
  64.         if (newsockfd < 0)
  65.           error("ERROR on accept");
  66.          
  67.         printf("Waiting on recvmsg() \n");
  68.        
  69.         recv = recvmsg(newsockfd , &mh, 0);
  70.         if (recv == -1) {
  71.                 perror("recvmsg failed ");
  72.                 strerror(errno);
  73.                 return -1;
  74.         }
  75.        
  76.         printf("I received: %s\n", primo);
  77.        
  78.         n = write(newsockfd,"I got your message",18);
  79.         if (n < 0) error("ERROR writing to socket");
  80.         close(newsockfd);
  81.         close(sockfd);
  82.         return 0;
  83. }