4

現在、サーバープロセスのスレッドごとに複数のクライアントを処理するために kqueue を使用しているため、Signal SIGPIPE が表示されたときにスレッドを終了させたくありません。対応する socked id を kqueue から削除したいだけです。したがって、私の質問は次のとおりです。シグナルハンドル内の適切なソケット ID を取得し、それを解析してプロセスに戻してイベント kqueue から削除する方法はありますか、または SIGPIPE を SIG_IGN に jsut し、-1 を返すことで削除を処理しますか?送信?タイムアウト時間の後に-1値を返すか、すぐにsend -1を返しますか?

そして最後に、信号無視が私の解決策である場合: id の宣言を配置する必要がある場所

typedef void (*sig_t) (int);
 sig_t
 signal(int sig, sig_t func);

それはメイン関数にある必要がありますか?または対応するスレッドの先頭に?それともグローバル要素として?

4

2 に答える 2

1

'signal( ...' コードは 'main' にある必要があります。

于 2013-11-15T08:16:51.523 に答える