我有一个自发断开的 System.Net 套接字,尤其是当我在 Visual Studio 2010 调试器中查询其状态 TWICE 时。
它是这样实例化的:
_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 秒并设置断点,那么我第一次查看调试器时它会是真的,而我第二次查看它时会是假的,然后它会在那一点上退出循环,证明它是不仅仅是调试器的工件 - 它确实设置为 false。
当它断开连接时,网络嗅探器上没有相关的活动,即它没有被主机断开连接。
这是一个单线程应用程序。我开始研究这个,因为后来当我尝试使用我的套接字时,我经常发现它断开连接并试图找出原因。