我正在构建一个小型测试服务器。这是它的主要部分:
while(1){
addr_size = sizeof(their_addr);
debug("still working here my friend?");
new_sock = accept(sockfd,(struct sockaddr*)&their_addr,&addr_size);
if(new_sock == -1){
debug("cant find sockfd");
continue;
}
debug("pid: %d",getpid());
if(fork() >0){
close(sockfd);
while(1){ //this snippet works fine
debug("start reading");
read_some(new_sock,buffer);
bstring data = RingBuffer_get_all(buffer);
rs = process_request(&root,bdata(data));
byte_send = send(new_sock,rs,strlen(rs),0);
}
close(new_sock);
exit(0);
}
close(new_sock);
}
运行服务器时,每当我关闭客户端连接时,服务器也会自动退出。但是,当我将fork() >0
更改为!fork()
时并没有发生。 (fork() >0)
和!fork()
总是可以在这里创建新流程时有什么区别?
答案 0 :(得分:2)
fork()
可以返回正数,零和-1
,以防发生错误。
通过将fork() > 0
(对于正数为True)更改为! fork()
(对于非零为True),您将fork()
的成功执行与失败的情况相结合fork()
返回-1
。
不,他们不能总是创建新流程,有时会失败。