atom feed3 messages in org.freebsd.freebsd-threadsthreads/94467: send(), sendto() and s...
FromSent OnAttachments
Sven Berkvens-MatthijsseMar 15, 2006 11:10 am 
Daniel EischenMar 15, 2006 2:15 pm 
Daniel EischenMar 15, 2006 2:20 pm 
Subject:threads/94467: send(), sendto() and sendmsg() are not correct in libc_r
From:Daniel Eischen (deis@freebsd.org)
Date:Mar 15, 2006 2:20:08 pm
List:org.freebsd.freebsd-threads

The following reply was made to PR threads/94467; it has been noted by GNATS.

From: Daniel Eischen <deis@freebsd.org> To: Sven Berkvens-Matthijsse <sv@ilse.net> Cc: Free@freebsd.org, <free@freebsd.org> Subject: Re: threads/94467: send(), sendto() and sendmsg() are not correct in libc_r Date: Wed, 15 Mar 2006 09:16:07 -0500 (EST)

On Wed, 15 Mar 2006, Sven Berkvens-Matthijsse wrote:

Number: 94467 Category: threads Synopsis: send(), sendto() and sendmsg() are not correct in libc_r Confidential: no Severity: serious Priority: medium Responsible: freebsd-threads State: open Quarter: Keywords: Date-Required: Class: sw-bug Submitter-Id: current-users Arrival-Date: Wed Mar 15 11:10:21 GMT 2006 Closed-Date: Last-Modified: Originator: Sven Berkvens-Matthijsse Release: FreeBSD 4.10-STABLE i386 Organization: ilse media BV Environment:

System: FreeBSD serv7.ilse.net 4.10-STABLE FreeBSD 4.10-STABLE #23: Wed Aug 4
15:18:52 CEST 2004 ro@tango.ilse.net:/usr/obj/usr/src/sys/BAROQUE i386

Description:

send(), sendto() and sendmsg() can return prematurely in the libc_r implementation. If the socket has space available, but not enough to accommodate the whole data block at once, the kernel's sendto() will return with a premature byte count, because all the sockets are always put into nonblocking mode. However, unlike write(), which does implement this correctly, the implementation of sendto() and co do not check for this condition if the thread's notion of the socket was non-blocking. Instead, it just returns the permature bytecount instead of starting another sendto()/sendmsg() to complete the action (and possibly putting the thread to sleep until poll() says it's okay to try again), like a non-blocking version should.

We're not maintaining libc_r any longer, and 4.x is pretty much a dead branch. If you need bug fixes, you need to upgrade to 6.x stable and use libpthread or libthr.

-- DE