这是(部分)我的服务器端代码
void timeout_handler(int value) {
printf("Handler\n");
return;
}
int main (int argc, char **argv) {
[...]
signal(SIGALRM, timeout_handler);
alarm(seconds);
int result = read(input_socket, buffer, sizeof(buffer));
if (result == -1 && errno == EINTR) {
printf("read() failed\n");
}
[...]
}
input_socket
与客户端正确连接的 TCP 套接字在哪里(如果我从客户端发送数据,服务器会接收它们)。
作为警报信号的测试,我尝试只打开并连接套接字客户端而不发送任何数据。我希望输出像
Handler
read() failed
但结果只是Handler
消息,然后进程仍然处于活动状态。
为什么read()
不失败errno=EINTR
?