2011-02-09 6 views
3

Windowsサービスとして実行されるC#で書かれたプロキシサーバーがあります。それは127.0.0.1:xxxxxでリッスンします。ここで、xxxxxは53500までのポートの範囲です。C#TCPポートが応答しないことをシミュレート

プロキシは本当にうまく動作しますが、特定のポートが応答を停止することがあります。そのポートにtelnet接続しようとすると、要求がタイムアウトしたか、応答しませんでした。

私は自分の開発領域でこの問題を再現できませんでしたが、EndReceiveの後にBeginReceiveが呼び出されない原因と関係していると思います。次の引用は、私が経験している症状についてのスレッドからの引用です。

同様の問題は、非同期通信を使用していて、以前のEndReceiveが完了した後にBeginReceiveを呼び出さないことが判明した実行パスがある場合です。これにより、リモート側から送信されたそれ以上のすべてのデータにソケットが無知になります。

ポートが応答しなくなるこの状況をシミュレートする方法はありますか?私はポートが要求を処理する前に応答しているかどうかをチェックするコードを書いています。応答しない場合は、そのポート上のリスナーを削除してもう一度追加することができます。これは、問題の原因を特定できるようになるまで、プロキシをクラッシュさせないようにするためのものです。

また、何が原因でポートが応答しなくなったのかを判断するために追加のログを追加しました。

+1

問題が疑わしい場所にコードを追加できますか? – jlafay

+0

それは可能性です。私は別のサービスでポートテストを行う予定でしたが、もう一度見ていきます。 – modernzombie

+0

おそらく、[この質問](http://stackoverflow.com/q/1094760)の回答で推奨されているツールの1つを試してみることができます。 – Blorgbeard

答えて

0

私は暗闇の中で刺すようですが、try finallyブロックに包まれたコードですか?

finallyブロックがEndReceiveを呼び出した唯一の場所であれば、問題が解消される可能性があります。

try{ 
    // processing code 
}finally{ 
    EndReceive() 
    BeginReceive() 

} 
関連する問題