TCP Socket.Connect正在生成误报

时间:2009-04-06 22:56:36

标签: c# .net sockets tcp

我在C#中使用Socket.Connect方法遇到了非常奇怪的行为。我正在尝试将TCP Socket.Connect连接到有效的IP但已关闭的端口,并且该方法正在继续,就像我已成功连接一样。当我打包嗅探发生的事情时,我看到应用程序正在从远程计算机接收RST数据包。然而,从现有的跟踪中可以看出,connect方法并没有抛出异常。可能导致这种情况的任何想法?

正在运行的代码基本上是

IPEndPoint iep = 
    new IPEndPoint(System.Net.IPAddress.Parse(m_ipAddress), m_port);
Socket tcpSocket = new Socket(AddressFamily.InterNetwork, 
    SocketType.Stream, ProtocolType.Tcp);
tcpSocket.Connect(iep);

添加到这个谜......当在独立的控制台应用程序中运行此代码时,结果是预期的 - connect方法抛出异常。但是,在Windows服务部署中运行它时,我们使用connect方法不会抛出异常。

编辑以回应Mystere Man的回答 如何吞下这个例外?我在.Connect方法正上方有一个Trace.WriteLine,在它下面有一个Trace.WriteLine(为了便于阅读,未在代码示例中显示)。我知道两条痕迹都在运行。我也有一个尝试捕捉整个事情,也做Trace.Writeline,我没有在日志文件中看到任何地方。我也按照你的建议启用了内部套接字跟踪。我没有看到任何例外。我看到似乎是成功的联系。

我正在尝试识别Windows服务应用程序和我制作的诊断控制台应用程序之间的差异。我的想法已经不多了

结束编辑

由于

3 个答案:

答案 0 :(得分:2)

您确定该异常未在服务中被捕获和吞没,而不是在控制台应用程序中被捕获吗?

我的第一步是隔离两个实现之间的差异。您提到了跟踪,但您没有说这是网络跟踪(BCL的一部分)还是您自己的跟踪。如果您没有使用网络跟踪,请启用它。

答案 1 :(得分:1)

请参阅AppDomain.CurrentDomain.UnhandledException

答案 2 :(得分:0)

我再也没有观察到这一点。在我看来某些东西在某处腐败了。安装应用程序的操作系统或.NET框架。