微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Winsock:与SO_REUSEADDR的奇怪冲突

我面对一个奇怪的行为。

该手册声称 :“当两个套接字绑定到相同的端口号,但在不同的显式接口上时,没有冲突”。 为什么系统在步骤3的下列情况下失败? 这是在操作系统中的错误? (我的微软论坛上的post没有答案)有没有一些解决方法呢?

步骤1.过程A绑定127.0.1.1:88(认) – 确定

步骤2.过程B绑定127.0.0.1:88(与SO_REUSEADDR) – 确定

第3步。进程C绑定127.0.0.1:88(与SO_REUSEADDR) – 失败(10013 WSAEACCES)

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

Windows Vista(32位),Windows Server 2008(32位),Window Server 2008 R2(64位)等发生此问题。

getsockopt从setsockopt中设置的返回值中返回不同的IP_TOS值

VB.net服务编程和使用TCP套接

UDP服务器给分段错误

绑定到127.0.0.2

字节分配

在Windows XP中可以:步骤3成功。

更新 :仅供参考,同样的问题: Windows 7的套接字行为与XP有所不同,重复使用地址套接字选项(WSAEACCES 10013错误

获取具有到给定主机路由的接口的IP地址

通过套接字发送NULL数据

绑定与SO_BINDTODEVICE套接

使用node.js连接到已经build立的UNIX套接字?

ad hocnetworking中的UDP套接字(Ubuntu 9.10)

当两个套接字使用SO_REUSEADDR时,将两个套接字绑定到相同的显式接口和端口可以保证成功,即使是Microsoft文档也是这样说的。 它必须是代码中的一个bug,要么是在调用bind()之前在两个套接字上都不启用SO_REUSEADDR ,要么是实际上并没有将这两个套接字绑定到相同的显式接口和端口上。

如果接口/端口已被使用,则bind()不会返回WSAEACCES 。 它将返回WSAEADDRINUSE 。 WSAEACCES意味着你试图绑定到你没有绑定权限的东西。 这是一种不同的错误情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐