Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Feb 2001 09:14:08 -0800 (PST)
From:      Luigi Rizzo <rizzo@aciri.org>
To:        net@freebsd.org
Subject:   send problem on udp socket...
Message-ID:  <200102071714.f17HEDH75274@iguana.aciri.org>

next in thread | raw e-mail | index | archive | help
Hi,

just occurred to me that there exists the following feature of
send/sendmsg and probably also write on UDP sockets, and it would
be worth documenting.

When you attempt to send() to an udp socket, the socket buffer
(which has no function other than bounding the max message size
for UDP sockets) is just bypassed, and the low-level routine gets
called. The latter (typically ip_output() or ether_output()) can
return an ENOBUFS message if some queue fills up down there (typically
the interface queue), and the error message is passed up.

Now, the send() manpage is technically correct as it only
mentions the socket buffer full as the reason for blocking,
but in my opinion the above is not _that_ obvious and it would
be worth documenting.

As a matter of fact, i wonder if it would be a good idea to
try and improve this behaviour by letting sosend() do a tsleep()
on the device/subsystem reporting the failure, and have the
latter issue a wakeup when space frees again. The only thing
is, i believe this has some odd ramifications with handling
select/poll, and might break some software that does not
handle blocking send() on UDP sockets.

	cheers
	luigi
----------------------------------+-----------------------------------------
 Luigi RIZZO, luigi@iet.unipi.it  . ACIRI/ICSI (on leave from Univ. di Pisa)
 http://www.iet.unipi.it/~luigi/  . 1947 Center St, Berkeley CA 94704
 Phone: (510) 666 2927
----------------------------------+-----------------------------------------


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200102071714.f17HEDH75274>