私は、次のコードをデバッグしています:man 3 siginterrupt
アラームで説明したようにのrecvfrom()のタイムアウト()
signal(SIGALRM, testt);
alarm(1);
result = recvfrom(listening_socket, buf, maxlen, 0, &from, &fromlen);
printf("stoped\n");
をシステムコールを中断しますが、私の場合にはそうではないはずです。アラームハンドラが呼び出されますが、recvfrom
は中断されません。
ただし、signal(2)関数で新しいシグナルハンドラを指定すると、システムコールはデフォルトで中断されます。
アラームハンドラの設定後にsiginterrupt(SIGALRM, 1);
を追加すると、recvfrom
が期待どおりに中断されます。
私には何が欠けていますか?私のコードに何が問題なのですか?
注:signal
をsigaction
に置き換えることは、私が探しているものではありません。
'siginterrupt(3)'はPOSIX.1-2008では廃止とマークされていることに注意してください。 – ninjalj