23

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

4

1 に答える 1

43

EPOLLRDHUPピアのシャットダウンを検出するために使用しますEPOLLHUPが、(ソケットの予期しないクローズ、つまり通常は内部エラーを通知します)ではありません。

それを使用することは本当に簡単です、あなたが与えている他のフラグと一緒にフラグを「または」するだけですepoll_ctl。したがって、たとえば、EPOLLIN書き込みの代わりにEPOLLIN|EPOLLRDHUP

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

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

于 2011-06-22T10:09:49.980 に答える