私たちは、Filezilla ClientとFilezilla Serverの間に2つのプロキシを持つ通信を行います。 2つのプロキシの間に2つのTCP接続があります。ソケットのライブを維持する方法
filezillaクライアント - > P1 - 2 ----- P2 - > filezillaサーバー。
私たちが得ている問題は、アップロードfilezillaクライアントがP1にすべてのデータを送信し、P1がP2にデータを送信することです。しかしP2 recv。速度はP1の送信速度ほど速くはありません。 P1はしばらくしてから接続を終了しますが、P2はまだP1からデータを取得しようとしているので、recvできなくなり、失敗します。
もう一方の端がデータを完全に受信するまで、soketを有効に保つ方法はありますか?
私は、異なるタイムアウトオプションを使用してLingerを試してみました。すべてのシナリオを処理するわけではありません。
ソケットオプションキープアライブを設定しようとしましたが、同じ問題が引き続き発生します。
誰でも助けてください、または私に何か提案できますか?
これは起こるべきではありません。 FTPは、いくつかのTCP接続に基づいています。 TCPにはフロー制御メカニズムが組み込まれています。エンドポイントはウィンドウサイズを調整して、リンクの一部に過負荷がかからないようにします。プロキシがデータを交換している限り、ソケットは削除しないでください。なぜP1のクライアントサブシステムはソケットを閉じますか?どのようなエラー/ステータスメッセージ/ログが生成されますか? –
P1には2つのソケットがあります。たとえば、filezillaクライアント(sock1)で1つのソケットをアップロードし、P2(sock2)にデータを送信する1つのソケットです。 P1とP2の間の通信チャネルが破損し、ファイル送信が失敗する結果となります。 – Nidhi