我有一个自动断开的System.Net套接字,特别是当我在VisualStudio2010调试器中两次查询它的状态时。
它实例化如下:
_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);
}在连接调用之后,其连接属性是调试器中的真,网络嗅探器将显示与主机的成功连接。
但是,如果我在调试器中第二次检查已连接的属性,它将显示为false。
如果我没有在循环中设置任何断点,那么它会一直贯穿整个循环(100秒),当它掉出时,下一次我在调试器和false中第一次看到连接的属性是真。
如果我让它循环10秒或15秒和断点,那么当我第一次查看调试器时,它将是true,而当我第二次查看它时,它将从循环中掉下来,证明它不仅仅是调试器的工件--它真的被设置为false。
当它断开连接时,网络嗅探器上没有相关的活动,也就是说,主机没有断开它的连接。
这是一个单线程应用程序。我开始研究这个问题,因为后来当我尝试使用我的套接字时,我经常发现它断开连接,并试图找出原因。
发布于 2013-01-07 15:16:26
该问题似乎是Visual 2010 Express调试器中的一个bug。
正如我在上面的评论中提到的,在调试器的第二次触摸上,这种奇怪的行为发生在两台独立的PC上-- XP机器和Win 7 PC。为了增加更多细节,XP机器连接到一台工业设备,Win7 PC连接到本地主机。两台PC都在运行VisualWeb2010Express。
因此,我尝试了Visual 2010的完整pro版本,但没有遇到这样的行为。
最初导致我开始查找调试器的原始断开问题,在调试器不再断开我之后很容易找到。我认为这是我在30年的编程生涯中所见过的最奇怪的问题之一。
https://stackoverflow.com/questions/14163230
复制相似问题