首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MAC上返回SOCKET_ERROR

在MAC上返回SOCKET_ERROR
EN

Stack Overflow用户
提问于 2021-05-04 15:01:41
回答 1查看 163关注 0票数 0

以下是有关我的开发环境的信息:

窗口:

操作系统: Windows 10

Qt: 5.15.2

编译器: MSVC2019

MAC:

操作系统: macOS Catalina (v10.15.7)

Qt: 5.15.2

编译器: clang 64位

在我的应用程序中,我向运行在不同PC上的同一应用程序的其他实例发送一些多播数据包。下面是代码片段:

代码语言:javascript
复制
        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上工作。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-05-05 13:55:01

用上面提到的Windows的套接字调用替换bind方法调用,帮助我解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67387290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档