Messages in this thread | | | From | "H. Peter Anvin" <> | Subject | Re: send(), sendmsg(), sendto() not thread-safe | Date | Mon, 15 May 2006 15:24:16 -0700 (PDT) |
| |
Followup to: <OFE8460E54.0C8D85D8-ON8525716F.0074F22F-8825716F.0076D537@us.ibm.com> By author: Mark A Smith <mark1smi@us.ibm.com> In newsgroup: linux.dev.kernel > > I discovered that in some cases, send(), sendmsg(), and sendto() are not > thread-safe. Although the man page for these functions does not specify > whether these functions are supposed to be thread-safe, my reading of the > POSIX/SUSv3 specification tells me that they should be. I traced the > problem to tcp_sendmsg(). I was very curious about this issue, so I wrote > up a small page to describe in more detail my findings. You can find it at: > http://www.almaden.ibm.com/cs/people/marksmith/sendmsg.html . > > Thanks, > Mark A. Smith > > PS. I am using the term "thread" in the general sense, this is a problem > independent of pthreads, etc. The problem occurs when two processes > (whether or not they share an address space) send on the same socket (and > some other low-resource conditions exist). >
User error. Writes onto a streaming socket (or a pipe) are thread-safe, *but not necessarily atomic*, if the size exceeds PIPE_BUF.
If you want atomicity you either have to do your own locking, or use a DGRAM or SEQPACKET socket.
-hpa
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |