我使用的.Net的Socket类,我用下面的代码:为什么.Net Socket.Disconnect需要两分钟?
socket.Shutdown(SocketShutdown.Both);
socket.Disconnect(true);
这就块整整两分钟。我指定了true,因为我将立即重用套接字并重新建立连接。无论是否有关机呼叫,它都会阻塞两分钟。我能做的唯一事情就是传递错误来断开连接。但我想重用套接字。
任何想法?
UPDATE:
我已阅读代码。我已经设置了DontLinger选项。它没有帮助。
更新2:
我已经加入网络跟踪按请求:
跟踪1:使用DontLinger选项
System.Net.Sockets Verbose: 0 : [4668] Socket#5009246::Socket(InterNetwork#2)
System.Net.Sockets Verbose: 0 : [4668] Exiting Socket#5009246::Socket()
System.Net.Sockets Verbose: 0 : [4668] Socket#5009246::Connect(eee:nnnn#-2063562120)
System.Net.Sockets Information: 0 : [4668] Socket#5009246 - Created connection from aaa.bbb.ccc.ddd.eee:nnnnn to www.xxx.yyy.zzz.:mmmm.
System.Net.Sockets Verbose: 0 : [4668] Exiting Socket#5009246::Connect()
System.Net.Sockets Verbose: 0 : [4668] Socket#5009246::Disconnect()
System.Net.Sockets Verbose: 0 : [4668] Exiting Socket#5009246::Disconnect()
迹线2:使用关机(SocketShutdown。都);
System.Net.Sockets Verbose: 0 : [0300] Socket#5009246::Socket(InterNetwork#2)
System.Net.Sockets Verbose: 0 : [0300] Exiting Socket#5009246::Socket()
System.Net.Sockets Verbose: 0 : [0300] Socket#5009246::Connect(ddd:eeeee#-2063562120)
System.Net.Sockets Information: 0 : [0300] Socket#5009246 - Created connection from aaa.bbb.ccc.ddd:eeee to www.xxx.yyyy.zzzz:nnnnn.
System.Net.Sockets Verbose: 0 : [0300] Exiting Socket#5009246::Connect()
System.Net.Sockets Verbose: 0 : [0300] Socket#5009246::Shutdown(Both#2)
System.Net.Sockets Verbose: 0 : [0300] Exiting Socket#5009246::Shutdown()
System.Net.Sockets Verbose: 0 : [0300] Socket#5009246::Disconnect()
System.Net.Sockets Verbose: 0 : [0300] Exiting Socket#5009246::Disconnect()
我们可以看到一些周围的代码吗?有可能是由于其他原因导致延迟,例如循环或阻塞呼叫。 – 2010-12-07 19:29:15