Guest User

Untitled

a guest
Dec 16th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <netinet/in.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <errno.h>
  7. #include <string.h>
  8. #include <arpa/inet.h>
  9. #include <unistd.h>
  10.  
  11.  
  12. #define SRV_PORT 9527
  13. #define LISTEN_LEN 5
  14. #define MAX_BUF_LEN 1024
  15.  
  16. void do_job(int);
  17.  
  18. int main(int argc, char **argv)
  19. {
  20. int listenfd, connfd;
  21. pid_t child_pid;
  22. struct sockaddr_in srv_addr, cli_addr;
  23. int cli_len = sizeof(cli_addr);
  24.  
  25. printf("Hello, I'm server!\r\n");
  26. listenfd = socket(AF_INET, SOCK_STREAM, 0);
  27. if (listenfd == 0)
  28. {
  29. printf("socket fail, err(%s)\n", strerror(errno));
  30. return -1;
  31. }
  32.  
  33. bzero(&srv_addr, sizeof(struct sockaddr_in));
  34. srv_addr.sin_family = AF_INET;
  35. srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  36. srv_addr.sin_port = htons(SRV_PORT);
  37.  
  38. if (0 != bind(listenfd, (struct sockaddr*)&srv_addr, sizeof(srv_addr)))
  39. {
  40. printf("bind fail, err(%s)\n", strerror(errno));
  41. close(listenfd);
  42. return -1;
  43. }
  44.  
  45. if (0 != listen(listenfd, LISTEN_LEN))
  46. {
  47. printf("listen fail, err(%s)\n", strerror(errno));
  48. close(listenfd);
  49. return -1;
  50. }
  51.  
  52. while (1)
  53. {
  54. connfd = accept(listenfd, (struct sockaddr*)&cli_addr, (socklen_t *)&cli_len);
  55. if (-1 == connfd)
  56. {
  57. printf("accept fail, err(%s)\n", strerror(errno));
  58. close(listenfd);
  59. return -1;
  60. }
  61. if ((child_pid = fork()) == 0)
  62. {
  63. close(listenfd);
  64. do_job(connfd);
  65. //close(connfd);
  66. exit(0);
  67. }
  68. close(connfd);
  69. }
  70.  
  71. return 0;
  72. }
  73.  
  74. void do_job(int fd)
  75. {
  76. char buf[MAX_BUF_LEN];
  77. ssize_t len;
  78.  
  79. bzero(buf, MAX_BUF_LEN);
  80. len = read(fd, buf, MAX_BUF_LEN);
  81. if (len < 0)
  82. {
  83. printf("read failed\n");
  84. return;
  85. }
  86.  
  87. printf("recv from client:%s\n", buf);
  88.  
  89. if (-1 == write(fd, "hello, welcome to my server \r\n", 32))
  90. {
  91. printf("write failed]\n");
  92. return;
  93. }
  94. }
Add Comment
Please, Sign In to add comment