【发布时间】:2018-08-09 14:52:14
【问题描述】:
我在同一个 Windows VM 上运行了 100 个 Windows 服务安装。 他们每个人都在监听 2 个端口,例如 10050 和 60050。
每天有几次一个(或多个)服务不再接受新的传入连接。
当我重新启动服务时,出现以下异常。
System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at System.Net.Sockets.TcpListener.Start(Int32 backlog)
at SocketServerAsync.AsynchronousSocketListener.Start()
当我运行 netstat -ano 时,我在使用我的端口时看不到任何东西。
要重新启动服务,我必须更改端口号。
编辑 1 每个服务监听 2 个端口,其中一个是 WCF 服务,另一个是 TcpListener。当我正常重新启动它们时,它工作得很好。大多数时候它的 TcpListener 端口被其他东西使用,但确实发生了 WCF 服务端口被占用。 即使我将服务停止了一个小时,一旦出现问题,服务也无法再次启动。
- 什么是“占用”我的端口?
- 我需要为 VM 创建端点吗?
- 还有其他方法可以查看阻塞端口的原因吗?
- 即使我已经在监听端口,Azure 本身也会随机占用我的端口吗?
【问题讨论】:
-
关闭具有大量套接字的套接字服务器可能需要一段时间才能清除;你确定这个过程已经死了吗?您是否完全关闭了侦听器?你是用 http.sys 来监听的吗?
-
你我已经停止了故障服务几个小时,但无法再次启动它。它完全停止了。
标签: c# azure sockets virtual-machine