30dayMakeCppServer
30dayMakeCppServer copied to clipboard
day03的问题
trafficstars
server.cpp中的以下这段代码(70行)
else if(bytes_read == -1 && errno == EINTR){ //客户端正常中断、继续读取
printf("continue reading");
continue;
}
我查了一些资料,errno == EINTR是信号中断时read所返回的错误代码,而信号中断这个概念中的信号发送对象应该时服务器的内核、服务器的外部设备、或者是服务器的操作人员(比如ctrl+c挥着执行kill命令等)。
所以我的第一个问题是:作者在注释中写道“客户端正常中断”,执行这个分支跟客户端有关系吗?我觉得这里的注释应该是“服务器正常中断、继续读取”。
还有就是在各种资料中我得到了一个结论:“中断信号被捕获并处理时,read() 才会被中断返回 -1 并设置 errno == EINTR”,而捕获并处理的代码应该是这样的:
signal(SIGINT, sigint_handler);
第一个参数表示处理的信号,SIGINT代表“ctrl+c”中断信号,第二个参数代表处理函数,sigint_handler是一个处理中断信号的函数。但是server.cpp中并没有这个处理,
所以我的第二个问题是,70行这个分支有没有可能被执行?