使用XP和Vista之间的winsock API差异进行UDP多播

Tho*_*omi 5 c++ sockets windows winsock windows-vista

似乎在Windows XP和Windows Vista之间设置UDP多播套接字所需的实现已经改变.特别:

  • 在Windows XP下,必须先调用,bind()然后才能引用任何特定于多播的套接字选项.

  • 但是,在windows vista下,处理多播套接字时不得调用bind().

如果两个点中的任何一个失败都会导致运行时出现套接字错误.

我是疯了,还是有其他人也看过这个?有没有比bind()调用的条件编译更好的解决方案?

Len*_*ate 5

您从setsockopt()应用IP_ADD_MEMBERSHIP和加入多播组的呼叫中获得了什么错误?

我刚刚在我的服务器框架上运行了一些测试,我注意到我bind()在Windows 7上调用(我没有手持Vista盒子),然后我可以按预期加入多播组,只要两者都可以.绑定地址和组播地址有效.

但是我无法调用bind()INADDR_ANY,因为这会导致多播组的加入失败,错误为10022(WSAEINVAL),如果多播组地址不是有效的多播地址,则调用失败,错误为10049(WSAEADDRNOTAVAIL).这一切看起来都很公平.

我现在正在启动一个XP盒子......

[在XP上测试后编辑]

在XP是合法的bind()INADDR_ANY,它是合法的使用无效的多播地址.所以,我希望,你正在做其中的一个,因此它适用于XP,而不适用于Vista/Win7.

那么,你得到了什么错误以及你绑定的地址是什么?