gpt4 book ai didi

windows - Winsock:与 SO_REUSEADDR 的奇怪冲突

转载 作者:可可西里 更新时间:2023-11-01 02:40:09 24 4
gpt4 key购买 nike

我遇到了一个奇怪的行为。

manual claimed :“当两个套接字绑定(bind)到相同的端口号但在不同的显式接口(interface)上时,没有冲突”。 为什么在第 3 步出现以下情况时系统会失败?这是操作系统中的错误吗? (我在Microsoft forums上的帖子没有答案)是否对此有一些解决方法?

  • 第 1 步。进程 A 绑定(bind) 127.0.1.1:88(默认)— 确定
  • 第 2 步。进程 B 绑定(bind) 127.0.0.1:88(使用 SO_REUSEADDR)— OK
  • 第 3 步。进程 C 绑定(bind) 127.0.0.1:88(使用 SO_REUSEADDR)— 失败(10013 WSAEACCES)

注意:tcp 端口相同,接口(interface)不同 并且明确(在步骤 1 和 2-3 之间)。用户相同。

问题出现在Windows Vista(32位)、Windows Server 2008(32位)、Window Server 2008 R2(64位)等系统

在 Windows XP 中没问题:第 3 步成功。

更新:仅供引用,同样的问题:Windows 7 socket bind behavior difference from XP, with reuse address socket option (WSAEACCES 10013 error)

最佳答案

当两个套接字都使用 SO_REUSEADDR 时,将两个套接字绑定(bind)到相同的显式接口(interface)和端口保证成功,即使是 Microsoft documentation这么说。它必须是您的代码中的错误,或者您在调用 bind() 之前没有在两个套接字上启用 SO_REUSEADDR,或者您实际上没有将两个套接字绑定(bind)到相同的显式接口(interface)和端口。

如果接口(interface)/端口已在使用中,

bind() 不会返回 WSAEACCES。它返回 WSAEADDRINUSE 而不是。 WSAEACCES 表示您试图绑定(bind)到您无权绑定(bind)的内容。这是一种不同的错误情况。

关于windows - Winsock:与 SO_REUSEADDR 的奇怪冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11232590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com