私のアプリケーションには 2 つのスレッドがあります。各スレッドは、各ソケットを介してサーバーからデータを受け取ります。スレッドは epoll_wait() を返すのを待ちます。epoll_wait() が -1 を返し、errno が EINTR になることがあります。EINTR は、システム call() がシグナルによって中断されたことを意味します。EINTRを処理するために追加しました。しかし、どんなシグナルが届いたのか、なぜシグナルが届いたのかはわかりません。かな。
方法 1.
スレッドを作成しました。
sigset_t sMaskOfSignal;
sigset_t sOldMaskOfSignal;
sigfillset(&sMaskOfSignal);
sigprocmask(SIG_UNBLOCK, &sMaskOfSignal, &sOldMaskOfSignal)
while(1)
{
sigwait(&sMaskOfSignal, &sArrivedSignal);
fprintf(stdout, "%d(%s) signal caught\n", sArrivedSignal, strsignal(sArrivedSignal));
}
epoll_wait() が中断されたときにシグナルをキャッチできませんでした。
方法 2
アプリケーションを strace ツールで実行すると、epoll_wait() が中断されることはありません。
私の問題は GDB ツールで非常によく再現されています。助けが必要です....