使用ShareAddress进行多播的QUdpSocket绑定失败

时间:2014-09-08 07:44:06

标签: c++ qt udp

当另一个进程已绑定在指定端口上时,带有QT5.2的Windows上的简单代码失败。但是,ShareAddress标志应允许绑定多次。在MacOSX上它工作正常。

if (false == bind(QHostAddress::AnyIPv4, port_, QUdpSocket::ShareAddress))
{
    qDebug() << "Warn: cannot bind to the multicast port " << port_;
    qDebug() << error();
}
joinMulticastGroup(QHostAddress(address_));

这是QT中的错误吗?如果有,是否有解决方法?

感谢。

1 个答案:

答案 0 :(得分:2)

documentation中所述,Windows平台上会忽略ShareAddress

  

允许其他服务绑定到同一地址和端口。当多个进程通过侦听相同的地址和端口来共享单个服务的负载时,这很有用(例如,具有多个预分叉侦听器的Web服务器可以大大缩短响应时间)。但是,由于允许任何服务重新绑定,因此该选项受某些安全性考虑。请注意,通过将此选项与ReuseAddressHint组合,您还将允许您的服务重新绑定现有共享地址。在Unix上,这相当于SO_REUSEADDR套接字选项。在Windows上,此选项将被忽略。

我从不测试此解决方案,但根据我的理解,您可以尝试使用QUdpSocket::ReuseAddressHint作为Windows的替代标记。