macos - setsockopt 在 MAC 上返回 SOCKET_ERROR
问题描述
以下是有关我的开发环境的信息:
Windows:
操作系统:Windows 10
Qt:5.15.2
编译器:MSVC2019
MAC:
操作系统:macOS Catalina (v 10.15.7)
Qt:5.15.2
编译器:clang 64 位
在我的应用程序中,我将一些多播数据包发送到在不同 PC 上运行的同一应用程序的其他实例。以下是代码片段:
QUdpSocket myMulticastSocket;
// PC_PORT_TO_RECEIVE is the port number used for all application client multicast communication
#ifdef Q_OS_MAC
myMulticastSocket.bind(PC_PORT_TO_RECEIVE, QUdpSocket::ReuseAddressHint);
#else
myMulticastSocket.bind(QHostAddress::AnyIPv4, PC_PORT_TO_RECEIVE, QUdpSocket::ReuseAddressHint);
#endif
QHostAddress tHostAddr = lstValidIface.at(i); // lstValidIface is a list of valid network interfaces available.
// don't take any action for local host
if ((tHostAddr == QHostAddress::LocalHost) ||
(tHostAddr == QHostAddress::LocalHostIPv6) ||
(tHostAddr == QHostAddress::AnyIPv6) ||
(tHostAddr == QHostAddress::Any))
continue;
DWORD tIPAddr = htonl(tHostAddr.toIPv4Address());
int sktDesptr = myMulticastSocket.socketDescriptor();
int iErrCode = setsockopt(sktDesptr,
IPPROTO_IP,
IP_MULTICAST_IF,
(char*)&tIPAddr,
sizeof(tIPAddr));
上面的代码在 Windows 环境下运行良好。但在 MAC 中,对 setsockopt 的调用返回 SOCKET_ERROR (-1)。我无法弄清楚哪里出了问题。
请让我知道上述代码中是否有任何问题,或者需要做任何额外的工作才能使此代码在 MAC 上工作。
提前致谢。
解决方案
将 Mac 套接字的绑定方法调用替换为上面提到的 Windows 套接字,帮助我解决了这个问题。
推荐阅读
- angular - 用柏树拖放角树组件
- c# - 如何使用包含对象列表的对象列表将对象序列化为 JSON 文件?
- sql - SQL Server - 基于另一列求和,并与 STUFF/XML PATH 结合?
- python - 使用 Python 将列中的所有字符串转换为 ISODate 并复制到 MongoDB
- java - CAS过滤器在部署war时不拦截服务票证
- time-series - 选择最佳时间序列集合来预测给定的时间序列
- php - 使用 '?' 在旧 URL 的路由中
- multithreading - 线程状态和进程状态有什么区别?
- javascript - 有没有办法确保所有元素在再次操作之前都已重置到原始位置?
- python-3.x - 基维。用不同的数据刷新屏幕