我有一个服务,因为它将在TcpListener实例上调用Start()方法。此侦听器使用的端口不常见,并且不知道是否由任何其他服务使用。非常非常罕见的一分钟左右它会遇到一个奇怪的错误。一分钟后,服务(失败时立即重启)背靠背崩溃,出现以下异常:
SocketException
at System.Net.Sockets.Socket.DoBind(System.Net.EndPoint, System.Net.SocketAddress)
at System.Net.Sockets.Socket.Bind(System.Net.EndPoint)
at System.Net.Sockets.TcpListener.Start(Int32)
at MyTestServer.Server.StartListening()
如下所示的异常消息:
Only one usage of each socket address (protocol/network address/port) is normally permitted
This文章表明我遇到了端口耗尽问题,我应该调整注册表来修改WinSock的超时和端口范围值。这一切都很好,但我只有(或期望有)50-100个客户端连接。我怎么可能用完了端口?机器人和端口扫描仪?
答案 0 :(得分:4)
可能不是因为它在那篇文章中的端口耗尽。他们正在与WCF(这就像TCPClient)连接。您绑定到TCP端口并等待连接。这不是严格相同的事情。您绑定到特定的TCP端口号。当您收到此消息时,Windows(正确与否)认为它正在使用中。 Windows报告另一个进程已绑定到该端口,因此您不能。您可以让2个进程尝试使用该端口并解决此问题,因此50-100数字不是问题。
要么是在其他地方导致此问题,要么是有其他应用程序导致此问题。
如果服务遇到问题并且在没有调用TCPListener.Stop()的情况下死亡,那么服务会自动重启,它将无法绑定到端口,因为窗口可能不知道进程已完成。
您必须发布更多详细信息才能进一步了解。