使用ShareAddress进行多播的QUdpSocket绑定失败
QUdpSocket bind for multicast with ShareAddress fails
当另一个进程已经绑定到指定端口时,下面的简单代码在带有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的替代标志。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- Qt - QUdpSocket 绑定不断失败
- 使用ShareAddress进行多播的QUdpSocket绑定失败