これは私のサーバー側コード (の一部) です
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
ですか?