【问题标题】:WSEACCES error binding to socket on Windows Server 2008WSEACCES 错误绑定到 Windows Server 2008 上的套接字
【发布时间】:2014-03-14 12:38:51
【问题描述】:

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

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

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

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

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

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

机器正在运行 DNS 服务器,因此我将 DNS SocketPoolSize 设置为零,但这不起作用。 (我什至关闭了服务器,但这也无济于事)。

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

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

更新:我发现关闭 Windows 服务“Internet 连接共享”可以解决问题,尽管我仍不清楚该服务为何锁定这些特定端口。

【问题讨论】:

  • 这是权限问题,而不是“正在使用的端口”。
  • 是的,我明白这一点,但是什么会影响这个狭窄范围内的权限?根据 MS 文档,如果另一个进程的套接字绑定了 SO_EXCLUSIVEADDRUSE,或者以与套接字的访问权限相反的方式访问套接字,则会返回此错误。

标签: sockets tcp bind winsock


【解决方案1】:

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

这就是为什么服务器应用程序应该保持在低/特权端口范围内(即

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多