我有一个创建一个线程阻塞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;
(mRunning是一个boost ::原子) 对象的析构函数被调用从另一个线程,并做到这一点:
mRunning.store(false);
#ifdef WIN32
if (mSocket != -1) closesocket(mSocket);
#else
if (mSocket != -1) close(mSocket);
#endif
pthread_join(mThread, NULL);
这似乎是工作,但我的一个同事建议,如果recv的是在阅读的东西中间中断有可能是一个问题。这个线程安全吗?什么是关闭阻塞UDP套接字的正确方法? (需要跨平台的OSX/Linux/Windows)
他们不是增强套接字,他们是posix套接字。 Boost只是为了确保改变mRunning布尔是原子的。对不起,当我粘贴它,我没有注意到。 – 2011-06-10 12:55:37