3

ブロッキングを中断する OS のポータブルな方法はありacceptますか? デーモン/サービスがシャットダウン信号を受け取ったときに、リッスンしているすべてのネットワーク ホストを適切に閉じる必要があるマルチスレッド デーモン/サービスがあります。ノンブロッキング ソケットを使用するか、タイムアウトで選択する必要があると言う人もいますが、アプリケーションはできるだけ高速にする必要があるため、パフォーマンスが低下することはありませんか? デーモンはメイン スレッドで実行され、リッスンしている各ネットワーク ホストは独自のスレッドで実行されます。現在の問題はaccept、リッスンしているネットワーク ホストのソケットにネットワーク トラフィックがない場合、無期限に待機することです。シグナルを使用する必要がある場合、シグナルを使用して中断する例はどこにありacceptますか?

4

1 に答える 1

5

ここでの解決策は、accept何もすることがないときに呼び出さないことです。ノンブロッキングを使用するselectpoll、受け入れる何かがあるまで待ってから、acceptその時点で。非常に小さなタイムアウトを作成しない限り、非ブロッキング呼び出しからウェイクアップしてそのソケットで再度待機することによるパフォーマンスへの影響はありません。

于 2013-06-29T21:22:17.990 に答える