Advertisement
Guest User

Server

a guest
Oct 10th, 2012
1,154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement