2011-02-02 9 views
1

私はここではほとんど知っていない非常に奇妙なバグを持っています。C#非同期受信は、システム全体のネットワーククラッシュを引き起こします。

私はハードウェアに接続するソケットを持っています。同期的に送信しますが、非同期で受信します。

私は、次のコードを介してデータを送信します。

_dicSockets[lclIPEndPoint].Send(lclBytesSent, lclBytesSent.Length, SocketFlags.None); 

し、次のコードを経由して受信します。ハードウェアは10秒以内に、迅速に応答する場合、この方式は正常に動作します

protected virtual void receiveCallback(IAsyncResult ar) 
     { 
      PFDoReceiveDataArgs receiveData = (PFDoReceiveDataArgs)ar.AsyncState; 
      Socket lclSocket = receiveData.MySocket; 
      etc... 

。しかし、ハードウェアが応答するのに(約5分)時間がかかると、狂った問題が発生します。この間に、whileループにあるスレッドがあり、コマンドが応答を受け取ったかどうかがチェックされます。

この間、ハードウェアは機能して機能していることがわかりました。私はコマンドを送信し、5分後に応答が到着します。 5回のうち4回、問題はありません、すべて期待どおりに動作します。同じコマンド、同じハードウェア、同じもの...

5回のうち1回、私のインターネット接続が失われたシステム全体のネットワーククラッシュがあります。

問題が何であるかわからないので、私はあなたからのアイディアを待って、必要に応じてコードを貼り付けます。

+0

あなたが話しているハードウェアは何ですか? – RQDQ

+0

"system-wide"とは、ネットワーク上のすべてのコンピュータが接続を失うか、コードを実行しているコンピュータだけを意味しますか? – Justin

+0

コードを実行しているコンピュータだけです。 – sbenderli

答えて

1

問題に直接関連しない場合がありますが、コントロールがreceiveCallbackメソッドコンテキストを離れる前にソケットインスタンスを破棄します。

+0

現在、私は自分のプログラム全体でソケットを使い続け、プログラムを終了するだけでそのソケットを破棄します。これに対してあなたは助言しますか? – sbenderli

0

疑わしいときは、ネットワークを盗聴してください。数年前、ネットワーク上のコンピュータが不正な形式のパケットをブロードキャストしていて、定期的にメインのシスコスイッチをダウンさせるという問題がありました。あなたが話している謎のハードウェアは、5回のうち1回、恐ろしいトラフィックをブロードキャストしているかもしれません。

問題が起こっている間にネットワークを盗聴して問題を見つけ出し、問題を絞り込むことができました。

+0

私はあなたの提案を試みます、ありがとう – sbenderli

関連する問題