0

いくつかのポートでリッスンするフォワード プロキシを Linux に実装しました。接続が発生するたびに、それは外の世界に入ります。私のセットアップは次のようになります。

Outerworld<----->プロキシ (ポート A でリッスン)<------->ブラウザ (プロキシをポート A に設定して構成)

しかし、proxy-outer world と proxy-browser の間の接続をいつ閉じるべきかわかりません。データ サイズが 0 のパケット (recv()) が表示されると、クライアント側からの通信が終了したという印象を受けました。「recv()=0」を取得したら、外界で「close()」を実行します。これは正しい方法ですか?または、shutdown() を実行する必要がありますか? また、ブラウザがデータパケットで「FIN」を送信し、それをキャッチできない場合があると思います。閉じられていないソケットでブラウザーからの接続が表示されることがあります。(Linux は同じ fd 番号を再利用します。これが理由の 1 つです。私はソケット クロージャが不足していると思います。)

どこが間違っているのでしょうか。

ありがとう

4

1 に答える 1

2

一般的な TCP フォワーダーの場合、シャットダウンは適切な使用方法です。一方から EOF を読み取る場合は、その側の読み取りを停止し、反対側の書き込みをシャットダウンします。次に、EOF が返されるまで他の方向の読み取りと書き込みを続けることができます。その後、両方を閉じます。

于 2012-08-16T23:34:27.370 に答える