Raspberry Pi3で動作するC++クライアントと、CentOS7とPhp7で動作するReactPHPサーバーとの間でソケットの混乱が発生しています。以下を参照してください。TCPソケットは永続的ですか?
- クライアントは、ポート1337
- クライアント上でTCP上のTLSを使用してサーバーへのソケット接続がサーバーにデータを書き込むことができる作成されます。
- サーバーはクライアントにデータを書き込むことができます。
- Tsharkは、ポート1337だけのフィルタを備えた両方のマシンで動作しており、この初期通信を確認します。
- 次の1時間は通信が行われず、両方のマシンのTsharkは通信が発生していないことを確認します。
- クライアントまたはサーバーのいずれもクローズ接続を受けておらず、接続がまだ開いていると考えます。
- サーバはクライアントにもう少しデータを書き込もうとしますが、Tsharkはサーバワイヤ上で送信を見ますが、Tsharkはクライアント側の送信を見ません。クライアントは応答しません。
- クライアントデーモンがシャットダウンされると、サーバーは接続が閉じられたことを検出します。
- クライアントデーモンの代わりにサーバーデーモンをシャットダウンすると、クライアントは接続が閉じられたことを検出しません。
php.iniはdefault_socket_timeoutが60秒であることを示し、値を変更しても影響はないようです。
これを引き起こしている原因は何ですか。どうすれば防止できますか?
は
これが見えます。答えに示唆されているようなSO_KEEPALIVEは、非活動状態のために状態を落とすことに役立ちます。 –