Sockets WSEACCES绑定到Windows Server 2008上的套接字时出错

Sockets WSEACCES绑定到Windows Server 2008上的套接字时出错,sockets,tcp,bind,winsock,Sockets,Tcp,Bind,Winsock,我有一台windows server 2008计算机,在该计算机上,我无法绑定到特定高端口范围的套接字,而不会收到错误10013(WSAEACCES)。特别是,我无法绑定到端口62788-64764,这相当不方便,因为我正在尝试启动一个配置为在该范围内的端口上运行的服务,并且我无法更改该配置。该进程从具有管理员权限的cmd窗口启动。-a 为什么我不能绑定到这些端口号 我尝试了所有显而易见的事情: Netstat-a不显示侦听这些端口的任何进程 使用netsh int ipv4 show excl

我有一台windows server 2008计算机,在该计算机上,我无法绑定到特定高端口范围的套接字,而不会收到错误10013(WSAEACCES)。特别是,我无法绑定到端口62788-64764,这相当不方便,因为我正在尝试启动一个配置为在该范围内的端口上运行的服务,并且我无法更改该配置。该进程从具有管理员权限的cmd窗口启动。-a

为什么我不能绑定到这些端口号

我尝试了所有显而易见的事情:

Netstat-a不显示侦听这些端口的任何进程

使用netsh int ipv4 show excludedportrange protocol=tcp,我验证了此范围内没有任何被排除的端口:

起始端口结束端口 ---------- -------- 80 80 443 443 8172 8172 47001 47001

机器正在运行DNS服务器,所以我将DNS SocketPoolSize设置为零,但这不起作用。(我甚至关闭了服务器,但也没用)

我已经重新启动(并踢)了几次机器,并且重置了winsock目录(netsh winsock reset)

我肯定还缺少其他一些配置设置;有什么想法吗


更新:我发现关闭Windows服务“Internet连接共享”会使问题消失,尽管我仍然不清楚该服务锁定这些特定端口的原因。

我猜在启用ICS的情况下,隐藏NAT也会启用(内部IP隐藏在单个或多个外部IP后面)。这意味着服务器将需要重写连接到internet的客户端的源IP和源端口,以避免源端口冲突。 因此,隐藏NAT网关通常会在较高区域(大于端口50000)中为此保留一个端口范围。因此,IC可能会为NAT端口阻塞整个高端口范围


这就是为什么服务器应用程序应该保持在低/特权端口范围内(也就是说,这是一个权限问题,而不是“正在使用的端口”。是的,我理解这一点,但在这个狭窄的范围内,什么可能会影响权限?根据MS文档,如果另一个进程将套接字绑定到SO_ExclusiveAdruse,或者如果以与套接字访问权限相反的方式访问套接字,则可能会返回此错误。)纳什。