UNIX Socket FAQ

A forum for questions and answers about network programming on Linux and all other Unix-like systems

You are not logged in.

  • Index
  • » Threads
  • » Proper way to close a blocking UDP socket

#1 2011-06-10 11:17 AM

Scott Wilson
Guest

Proper way to close a blocking UDP socket

I have a C++ object that creates a thread to read from a blocking UDP socket:

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 is a boost::atomic<bool>)

The object's destructor is called from another thread and does this:

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

This seems to work, but one of my colleagues suggested that there might be a problem if recv is interrupted in the middle of reading something. Is this thread safe? What's the correct way of closing a blocking UDP socket. (Needs to be cross-platform OSX/Linux/Windows)

#2 2011-06-11 07:35 PM

i3839
Oddministrator
From: Amsterdam
Registered: 2003-06-07
Posts: 2,239

Re: Proper way to close a blocking UDP socket

Offline

  • Index
  • » Threads
  • » Proper way to close a blocking UDP socket

Board footer

Powered by FluxBB