Tho*_*omi 5 c++ sockets windows winsock windows-vista
似乎在Windows XP和Windows Vista之间设置UDP多播套接字所需的实现已经改变.特别:
在Windows XP下,必须先调用,bind()
然后才能引用任何特定于多播的套接字选项.
但是,在windows vista下,处理多播套接字时不得调用bind()
.
如果两个点中的任何一个失败都会导致运行时出现套接字错误.
我是疯了,还是有其他人也看过这个?有没有比bind()调用的条件编译更好的解决方案?
您从setsockopt()
应用IP_ADD_MEMBERSHIP
和加入多播组的呼叫中获得了什么错误?
我刚刚在我的服务器框架上运行了一些测试,我注意到我bind()
在Windows 7上调用(我没有手持Vista盒子),然后我可以按预期加入多播组,只要两者都可以.绑定地址和组播地址有效.
但是我无法调用bind()INADDR_ANY
,因为这会导致多播组的加入失败,错误为10022(WSAEINVAL
),如果多播组地址不是有效的多播地址,则调用失败,错误为10049(WSAEADDRNOTAVAIL
).这一切看起来都很公平.
我现在正在启动一个XP盒子......
[在XP上测试后编辑]
在XP是合法的bind()
到INADDR_ANY
,它是合法的使用无效的多播地址.所以,我希望,你正在做其中的一个,因此它适用于XP,而不适用于Vista/Win7.
那么,你得到了什么错误以及你绑定的地址是什么?