web-dev-qa-db-ja.com

EPOLLHUPの使用方法

デッドピア処理にEPOLLHUPを使用した優れたサンプルコードを提供していただけませんか。ユーザーの切断を検出するためのシグナルであることは知っていますが、コードでこれをどのように使用できるかわかりません。よろしくお願いします。

20
user800799

EPOLLRDHUPではなく、EPOLLHUPを使用してピアのシャットダウンを検出します(これは、ソケットの予期しないクローズ、つまり通常は内部エラーを示します)。

それを使用するのは本当に簡単です。_epoll_ctl_に与える他のフラグと一緒にフラグを「または」するだけです。したがって、たとえばEPOLLINの代わりに_EPOLLIN|EPOLLRDHUP_を記述します。

_epoll_wait_の後で、if(my_event.events & EPOLLRDHUP)を実行し、反対側が接続を閉じた場合に実行したいことを実行します(おそらくソケットを閉じたいと思うでしょう)。

ソケットからの読み取り時に「ゼロバイト読み取り」の結果が得られることに注意してくださいまたは、もう一方の端が接続をシャットダウンしたことを意味するため、厄介な驚きを避けるために、常にそれもチェックする必要があります(FINが到着する可能性がありますEPOLLINから目覚めましたが、 ETモードの場合は、readを呼び出します、別の通知は届きません)。

35
Damon