3

我有一个自发断开的 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。

当它断开连接时,网络嗅探器上没有相关的活动,即它没有被主机断开连接。

这是一个单线程应用程序。我开始研究这个,因为后来当我尝试使用我的套接字时,我经常发现它断开连接并试图找出原因。

4

1 回答 1

-1

该问题似乎是 Visual Studio 2010 Express 调试器中的错误。

正如我在上面的评论中提到的,这种在调试器中第二次触摸时自发断开连接的奇怪行为发生在两台单独的 PC 上——一台 XP 机器和一台 Win 7 PC。为了添加更多细节,XP 机器连接到一台工业设备,而 Win7 PC 连接到本地主机。两台 PC 都运行 Visual C# 2010 Express。

因此,我随后使用完整的专业版 Visual Studio 2010 进行了尝试,但没有遇到此类行为。

The original disconnect problem that caused me to start looking in the debugger in the first place was then easy to find once the debugger was no longer disconnecting me. I think this was one of the weirdest problems I've ever seen in 30 years of programming.

于 2013-01-07T15:16:26.147 回答