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

QUdpSocket bind for multicast with ShareAddress fails

本文关键字:QUdpSocket 绑定 失败 多播 ShareAddress 使用      更新时间:2023-10-16

当另一个进程已经绑定到指定端口时,下面的简单代码在带有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中的错误吗?如果是,是否有解决方法?

谢谢。

如文档中所述,ShareAddress在Windows平台上被忽略。

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

我从未测试过这个解决方案,但据我所知,您可以尝试使用QUdpSocket::ReuseAddressHint作为Windows的替代标志。