Windows XP 和 Windows Vista 之间设置 UDP 多播套接字所需的实现似乎有所不同。具体来说:
这两点中的任何一个失败都会导致运行时出现套接字错误。
我是疯了还是其他人也看到了这个?有没有比bind()调用的条件编译更好的解决方案?
你从什么错误中得到setsockopt()
您拨打的申请电话IP_ADD_MEMBERSHIP
并加入多播组?
我刚刚用我的服务器框架在这里运行了一些测试,我注意到我确实调用了bind()
在 Windows 7 上(我手头没有 Vista 机器),只要绑定地址和多播地址都有效,我也可以按预期加入多播组。
但是我不能用INADDR_ANY
,因为这会导致加入多播组失败并出现错误 10022 (WSAEINVAL
)并且如果多播组地址不是有效的多播地址,则调用将失败并出现错误 10049(WSAEADDRNOTAVAIL
)。这一切看起来都很公平。
我现在正在启动 XP 盒子...
[在 XP 上测试后编辑]
在 XP 上这是合法的bind()
to INADDR_ANY
使用无效的多播地址是合法的。所以,我预计,您正在执行其中一项操作,因此它适用于 XP,而不适用于 Vista/Win7。
那么,您遇到了什么错误以及您绑定到什么地址?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)