デッドピア処理にEPOLLHUPを使用した優れたサンプルコードを提供していただけませんか。ユーザーの切断を検出するためのシグナルであることは知っていますが、コードでこれをどのように使用できるかわかりません。よろしくお願いします。
EPOLLRDHUP
ではなく、EPOLLHUP
を使用してピアのシャットダウンを検出します(これは、ソケットの予期しないクローズ、つまり通常は内部エラーを示します)。
それを使用するのは本当に簡単です。_epoll_ctl
_に与える他のフラグと一緒にフラグを「または」するだけです。したがって、たとえばEPOLLIN
の代わりに_EPOLLIN|EPOLLRDHUP
_を記述します。
_epoll_wait
_の後で、if(my_event.events & EPOLLRDHUP)
を実行し、反対側が接続を閉じた場合に実行したいことを実行します(おそらくソケットを閉じたいと思うでしょう)。
ソケットからの読み取り時に「ゼロバイト読み取り」の結果が得られることに注意してくださいまたは、もう一方の端が接続をシャットダウンしたことを意味するため、厄介な驚きを避けるために、常にそれもチェックする必要があります(FIN
が到着する可能性があります後EPOLLIN
から目覚めましたが、前 ETモードの場合は、read
を呼び出します、別の通知は届きません)。