fork进程并发服务器范式
1、fork为每一个客户派生一个处理它们的子进程,子进程关闭监听套接字,父进程关闭已连接套接字
listenfd=socket(...)
bind(listenfd,..)
listen(listenfd,..)
signal(SIGCHLD,sig_chld) //特意加上处理僵死进程,请看2
for(;;){
connfd=accept(listenfd,..) //在没有新的连接来到时,父进程阻塞在此
if(fork()==0){
close(listenfd) //子进程只负责连接,必须关了监听套接字
doit(connfd)
close(connfd)
exit(0) //子进程结束前,关了connfd
}
close(connfd) //连接套接字有子进程负责,父进程关了它
}
......
阅读全文