code_tin

从头编写高性能服务程序3-多进程阻塞
多fork几次 那fork到底放在哪里呢? 因为阻塞的特性会中断进程的运行知道阻塞情况接触 所以我们把fork放在...
扫描右侧二维码阅读全文
29
2010/01

从头编写高性能服务程序3-多进程阻塞

多fork几次
那fork到底放在哪里呢?
因为阻塞的特性会中断进程的运行知道阻塞情况接触
所以我们把fork放在accept之后
这样有实际链接之后才会产生子进程
现在这个程序在多个客户端连上来之后都能有反应了

#include #include #include #include #include int main(){ int listen_fd,accept_fd,flag; struct sockaddr_in my_addr,remote_addr; if ( (listen_fd = socket( AF_INET,SOCK_STREAM,0 )) == -1 ){ perror("create socket error"); exit(1); } if ( setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,(char *)&flag,sizeof(flag)) == -1 ){ perror("setsockopt error"); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(3389); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); if ( bind( listen_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr_in)) == -1 ) { perror("bind error"); exit(1); } if ( listen( listen_fd,1 ) == -1 ){ perror("listen error"); exit(1); } int pid; int addr_len = sizeof( struct sockaddr_in ); for(;;){ accept_fd = accept( listen_fd, (struct sockaddr *)&remote_addr,&addr_len ); pid=fork(); if( pid==0 ){ for(;;){ char in_buf[1024]; memset(in_buf, 0, 1024); recv( accept_fd ,&in_buf ,1024 ,0 ); printf( "accept:%s\n", in_buf ); } } else{ //manager the process } } return 0; }

Last modification:November 26th, 2018 at 04:16 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment