threads/94467: send(), sendto() and sendmsg() are not correct
in libc_r
Daniel Eischen
deischen at freebsd.org
Wed Mar 15 14:16:09 UTC 2006
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 root at 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
More information about the freebsd-threads
mailing list