Closed NaoyaFukuma closed 1 year ago
EPOLLERRは発火していない。 EPOLLHUPが発火している。
EPOLLHUPが子プロセスの終了していると考えられる。 UNIXドメインソケットに対し、hello_world.cgi内で、close()もしくはshutdown()を行っていないことが要因であると思われる。 ただ、RFC3875において、close()やshutdown()することは求められていないので、close()やshutdown()が行われないことを前提に対応する必要があると思われる。
発火したイベントが、epoll_wait()により通知される際にイベントマスクにビットフラグとして設定される。 その際に、イベントハンドラーを、 EPOLLHUP, EPOLLIN, EPOLLOUTとしていたため異常を起こしていた。 EPOLLOUT, EPOLLIN, EPOLLHUPの順とした。 EPOLLOUTにより、子プロセスへ送信。 INにより子プロセスからの出力を受信。 EPOLLHUPにより子プロセス終了の検知。 そうしなければ、子プロセスとの通信を処理する前に、EPOLLHUPが処理されてします。
現状
問題点 EPOLLERR or EPOLLHUPが発火している。 epoll_ctlが失敗している。
どちらも正常なシナリオなら発生しないはず。
問題の切り分け作業に入る。
まずはEPOLLERRなのかEPOLLHUPなのか。