小编Mül*_*sik的帖子

正确的方法来关闭阻塞的UDP套接字

我有一个C++对象,它创建一个线程来从阻塞的UDP套接字读取:

mRunning.store(true);
while (mRunning.load(boost::memory_order_consume)) {
    ...
    int size = recvfrom(mSocket, buf, kTextBufSize , 0,
                        (struct sockaddr *) &packet->mReplyAddr.mSockAddr, (socklen_t*)&packet->mReplyAddr.mSockAddrLen);

    if (size > 0) {
        //do stuff
    }
}
return 0;
Run Code Online (Sandbox Code Playgroud)

(mRunning是一个boost :: atomic)从另一个线程调用该对象的析构函数并执行此操作:

mRunning.store(false);  
#ifdef WIN32
    if (mSocket != -1) closesocket(mSocket);
#else
    if (mSocket != -1) close(mSocket);
#endif
pthread_join(mThread, NULL);
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但我的一位同事建议,如果recv在阅读过程中被中断,可能会出现问题.这个线程安全吗?关闭阻塞UDP套接字的正确方法是什么?(需要跨平台的OSX/Linux/Windows)

c++ sockets

9
推荐指数
2
解决办法
7767
查看次数

标签 统计

c++ ×1

sockets ×1