状況は次のとおりです。A と B の 2 台のマシンがあります。A はポート p をリッスンします。B はソケット s1 を作成し、p に接続します。A はソケット s2 で接続を受け入れます。今のところ、A と B はソケットを介して相互に通信できます。
ただし、A でプログラムを強制終了し、しばらくしてからこのプログラムを再起動すると、B はこの期間中に A にデータを送信していないため、わかりません。ここで、B は s1 を介して A にデータを書き込み始めます。次は何が起こるのだろう?なんで?
実際、write
呼び出しは失敗していないことがわかりましたが、A はまだデータを取得していません。さらに、s1 を epoll デバイスに入れると、 によって返されるイベントepoll_wait
がEPOLLERR | EPOLLHUP
への呼び出しの後であることがわかりましたwrite
。なんで?
残念ながら、この状況では、「書き込み」呼び出しは失敗しなかったが、A はデータを取得できなかったため、データを失ったように見えます。解決策はありますか?