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 套接字,帮助我解决了问题。