epoll_wait()
とリスナーソケットの間で次の相互作用が見られます。リスナー ソケットを作成するための一連のイベントは次のとおりです。
- 電話
socket()
- 電話
bind()
- 呼び出し
fcntl()
てノンブロッキングに設定 - と
epoll_ctl()
_EPOLL_CTL_ADD
_EPOLLET | EPOLLONESHOT | EPOLLIN
- 電話
listen()
epoll_wait()
このソケットやその他のソケットを呼び出すバックグラウンド スレッドがあり、手順 4 と 5 の間に呼び出しが行われるEPOLLHUP
と、リスナー ソケットのイベントが受信されます。シーケンスを次のように変更します。
- 電話
socket()
- 電話
bind()
- 呼び出し
fcntl()
てノンブロッキングに設定 - 電話
listen()
- と
epoll_ctl()
_EPOLL_CTL_ADD
_EPOLLET | EPOLLONESHOT | EPOLLIN
EPOLLIN
はこの問題を解決しますが、接続は確立されているが、リスナー ソケットのイベントが受信されないという誤ったエラーが表示されるようになりました。
代わりにレベルトリガーモードを使用できることは理解していますが、これをエッジトリガーモードで機能させたいと考えています。
問題が何であるかについて何か考えはありますか?