特に Visual Studio 2010 デバッガーでその状態を 2 回クエリすると、System.Net ソケットが自然に切断されます。
次のようにインスタンス化されます。
_TCPConn = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
後で、接続してループを設定し、「接続済み」プロパティを監視します。. .
_TCPConn.Connect(this.IPAddress, REMOTE_TCP_PORT);
// loop to figure out why / when we're disconnecting ...
int loops;
bool bState = false;
for (loops = 0; loops < 100; loops++)
{
bState = _TCPConn.Connected;
if (!_TCPConn.Connected)
{
break;
}
Thread.Sleep(1000);
}
Connect 呼び出しの直後に、その Connected プロパティがデバッガーでtrueになり、ネットワーク スニファーはホストとの接続が成功したことを示します。
しかし、デバッガーで Connected プロパティをもう一度調べると、falseと表示されます。
ループにブレークポイントを設定しないと、ループ全体 (100 秒) を通過し、ループアウトすると、Connected プロパティはデバッガーで初めて見たときにtrueになり、次回は falseになります。
10 秒または 15 秒間ループさせてブレークポイントを設定すると、デバッガーで最初に確認したときにtrueになり、2 回目に確認したときにfalseになり、その時点でループから外れて、デバッガーのアーティファクトだけではなく、実際には false に設定されています。
切断すると、ネットワーク スニファに関連付けられたアクティビティはありません。つまり、ホストによって切断されていません。
これはシングルスレッドのアプリケーションです。後でソケットを使用しようとしたときに、ソケットが切断されていることがよくあり、その理由を理解しようとしていたため、これを見始めました。