On 11/16/10 16:19, Joerg Sonnenberger wrote:
On Tue, Nov 16, 2010 at 03:37:59PM +0100, Ivan Voras wrote:
Are there any standard-defined guarantees for TCP network sockets
used by multiple threads to do IO on them?

System calls are atomic relative to each other. They may be partially
executed from the perspective of a remote system, e.g. due to
segmentation, but one system call will finish before the next call of
the same category is started.

It seems to me that with a multithreaded kernel and multithreaded userland that cannot really be guaranteed in general (and really should not be guaranteed for performance reasons), but maybe it's true for e.g. sockets if they are protected by a mutex or two within the kernel?

Specifically, will multiple write() or send() calls on the same
socket execute serially (i.e. not interfere with each other) and
blocking (until completion) even for large buffer sizes? What about
read() / recv()?

All write operations are serialised against each other, just like all
read operations are serialised against.

To what degree is such serialization standardized (by POSIX?)?

_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to