30dayMakeCppServer icon indicating copy to clipboard operation
30dayMakeCppServer copied to clipboard

day03的问题

Open DreamDealer-NO-47 opened this issue 6 months ago • 2 comments
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行这个分支有没有可能被执行?

DreamDealer-NO-47 avatar May 08 '25 13:05 DreamDealer-NO-47