读书人

请教server中的fork有什么用

发布时间: 2013-07-04 11:45:40 作者: rapoo

请问server中的fork有什么用?
while(1){
accept_fd=accept(listen_fd,NULL,NULL);
if((accept_fd<0)&&(errno==EINTR))
continue;
else if(accept_fd<0){
perror("accept error.");
continue;
}

if(fork()==0){
while(1){
if((read_size=recv(accept_fd,buf,BUFFER_SIZE, 0))==-1) {
perror("recv error.");
exit(1);
}
if(!strcmp(buf, "end")){
break;
}
printf("Server received : \n%s\n",buf);
}

close(listen_fd);
close(accept_fd);
exit(0);
}
else
close(accept_fd);
}

上面是server服务端listen以后的代码。这里为什么要用fork呢?父进程什么也没干,为什么还需要单独在子进程中进程接受数据?我自己试验了开多个terminal,可以实现多个client输入到server中,去掉fork则不行。有没有人能麻烦解释一下这个fork在这里到底怎么工作的? socket server fork 聊天 多client
[解决办法]
去掉fork的话,程序会阻塞在recv上,其它客户再连上来的话就没有办法及时调用Accept来接受连接,当然会出问题。


[解决办法]
有fork(),效果就是一个子进程对应一个客户端连接,互不影响,并发度高一些

这种策略是应对数据处理时间很长的情形,假定不产生子进程,那就是需要父进程自己接受客户端连接,并处理客户端的请求,在处理过程中,就不能接受新的客户端连接请求
[解决办法]
上面 我只是大致写了select 的意思 ,你自己对应着写下就OK,五一我抽时间把select函数的用法以我的理解整理出来

读书人网 >UNIXLINUX

热点推荐