Advertisement
Guest User

Untitled

a guest
May 26th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1.  
  2. #include <strings.h>
  3. #include <unistd.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <netdb.h>
  7. #include <syslog.h>
  8. #include <libgen.h>
  9. #include <arpa/inet.h>
  10. #include <sys/time.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <sys/types.h>
  14. #include <signal.h>
  15. #include <errno.h>
  16. #include <stdarg.h>
  17. #include <sys/stat.h>
  18. #include <fcntl.h>
  19.  
  20. int main () {
  21.  
  22. int listener_fd, new_fd;
  23. int on;
  24. int remotelen = sizeof(struct sockaddr_in);
  25.  
  26. struct sockaddr_in local_sin, remote_sin;
  27.  
  28. if(( listener_fd = socket( AF_INET, SOCK_STREAM,0 )) < 0 ) {
  29. printf("error socket");
  30. exit(1);
  31. }
  32.  
  33. on = 1;
  34.  
  35. if((setsockopt(listener_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on))) <0){
  36. printf("error setsockopt");
  37. exit(1);
  38. }
  39.  
  40. memset((char *)&local_sin, 0x0, sizeof(struct sockaddr_in));
  41. memset((char *)&remote_sin, 0x0, sizeof(struct sockaddr_in));
  42.  
  43. local_sin.sin_port = htons((short)25);
  44. local_sin.sin_family = AF_INET;
  45. local_sin.sin_addr.s_addr = htonl(INADDR_ANY);
  46.  
  47. if(bind(listener_fd,(struct sockaddr *)&local_sin,sizeof(struct sockaddr_in)) < 0 ){
  48. printf("error bind");
  49. exit(1);
  50. }
  51.  
  52. if(listen(listener_fd, 5) < 0) {
  53. printf("error listen");
  54. exit(1);
  55.  
  56. }
  57.  
  58. while (1) {
  59.  
  60. if((new_fd = accept(listener_fd,(struct sockaddr *)&remote_sin, &remotelen)) < 0){
  61.  
  62. perror("accept");
  63. exit(-1);
  64. }
  65. printf("new fd=%d\n", new_fd);
  66.  
  67. int reading = 1;
  68.  
  69. while(reading){
  70. char databuf[10];
  71. int rsize;
  72. char prev;
  73.  
  74. rsize = recv(new_fd, databuf, 10, 0);
  75.  
  76. if(rsize == 0){
  77. perror("connection closed");
  78. } else if(rsize < 0){
  79. perror("recv\n");
  80. exit(-1);
  81. }
  82. int i;
  83. for( i = 0 ; i < rsize ; i++){
  84. printf("%c", databuf[i]);
  85.  
  86. if(databuf[i] == '.' && prev == '\n'){
  87. close(new_fd);
  88. reading = 0;
  89. break;
  90. }
  91. prev = databuf[i];
  92. }
  93. }
  94. printf("\n");
  95. }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement