リモートサーバーのソケットに接続してリッスンするスクリプトがあります(現時点ではコード例はありませんが、IO::Asyncを使用しました)。クライアントは通常、新しいデータをリッスンするだけです。
問題は、ネットワークの問題が発生してソケット接続が失われたかどうかをクライアントが検出できないことです。私は IO::Async を使用し、IO::Socket でも試しました。最初の接続が確立された後、ハンドルは常に「接続」されます。
ネットワーク接続が再度確立された場合、スクリプトは再接続する必要があることを認識していないため、ソケット接続は当然失われます。
接続がまだそこにあるかどうかを確認するために、X秒ごとにソケットを「ping」(syswrite)するある種の「keepAlive」を作成することを考えていました(ソケットから新しいものがない場合)。
これは正しい方法ですか、それとも別のより創造的またはクリーンな解決策がありますか?