请问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函数的用法以我的理解整理出来