处理SIGCHLD信号时子进程自动重启

照着《unix网络编程》第五章中的代码写了一个类似的回射服务器
图片描述
图片描述
图片描述

当在客户端终止tcp连接时,SIGCHILD信号的处理函数执行后,main函数会继续fork出子进程
图片描述
但是按照书上所说,由于accept返回了EINTR错误,父进程应该被终止才对,仔细看了几遍,实在不知道哪里有问题,只能来求解答了

阅读 3.8k
1 个回答

没太明白,accept只是返回了EINTR错误,只是一个正常的函数返回,父进程会继续执行fork,但这个时候是没有意义的,因为connfd的值肯定是非法的(-1)。原书判断了connfd的值,并在accept下面有这样的代码:

if(errno == EINTR)
    continue;
else
    err_say("accept error");
    

这样才会中止。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题