仮想マシンで実行すると、何らかの理由で誤動作するコードがあります。
初期化の順序は次のとおりです。
s_listen = socket(...)
bind(s_listen, ...)
epoll_ctl(epfd, EPOLL_CTL_ADD, s_listen, ...)
listen(s_listen, SOMAXCONN)
bindが呼び出される前に、epollファイル記述子にイベントループ/スレッド実行および処理イベントがあります。
そのイベントループは、新しく作成されたs_listenソケットでlisten()を呼び出す前に、EPOLLHUPを取得します。
だから私の質問は、なぜ私は真新しいソケットでEPOLLHUPイベントを取得するのですか?
listen()の呼び出し後にepoll_ctlを配置するとエラーはなくなりますが、ソケットがepollに追加される前に接続イベントが発生した場合、接続イベントが失われる可能性がありますか?