From owner-freebsd-hackers@FreeBSD.ORG  Tue Nov 16 15:38:33 2010
Return-Path: <owner-freebsd-hackers@FreeBSD.ORG>
Delivered-To: freebsd-hackers@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id B7B78106566B
	for <freebsd-hackers@freebsd.org>; Tue, 16 Nov 2010 15:38:33 +0000 (UTC)
	(envelope-from joerg@britannica.bec.de)
Received: from www.sonnenberger.org (www.sonnenberger.org [92.79.50.50])
	by mx1.freebsd.org (Postfix) with ESMTP id 7BF578FC08
	for <freebsd-hackers@freebsd.org>; Tue, 16 Nov 2010 15:38:33 +0000 (UTC)
Received: from britannica.bec.de (www.sonnenberger.org [192.168.1.10])
	by www.sonnenberger.org (Postfix) with ESMTP id 0F771667A1
	for <freebsd-hackers@freebsd.org>; Tue, 16 Nov 2010 16:18:56 +0100 (CET)
Received: by britannica.bec.de (Postfix, from userid 1000)
	id B13B7116D6D; Tue, 16 Nov 2010 16:19:03 +0100 (CET)
Date: Tue, 16 Nov 2010 16:19:03 +0100
From: Joerg Sonnenberger <joerg@britannica.bec.de>
To: freebsd-hackers@freebsd.org
Message-ID: <20101116151903.GA2361@britannica.bec.de>
Mail-Followup-To: freebsd-hackers@freebsd.org
References: <ibu503$up9$1@dough.gmane.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <ibu503$up9$1@dough.gmane.org>
User-Agent: Mutt/1.5.21 (2010-09-15)
Subject: Re: Network socket concurrency (userland)
X-BeenThere: freebsd-hackers@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Technical Discussions relating to FreeBSD
	<freebsd-hackers.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-hackers>, 
	<mailto:freebsd-hackers-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-hackers>
List-Post: <mailto:freebsd-hackers@freebsd.org>
List-Help: <mailto:freebsd-hackers-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-hackers>,
	<mailto:freebsd-hackers-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Nov 2010 15:38:33 -0000

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.

> 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.

Joerg