select, sendto and ENOBUFS

Andre Oppermann andre at freebsd.org
Wed Feb 11 09:48:49 PST 2004


Mike Silbersack wrote:
> On Tue, 10 Feb 2004, Andrew wrote:
> 
> 
>>The conclusion being that send, sendto and select will never block on a
>>UDP socket and the man page just doesn't make it too clear. I'm assuming
>>it is the same for raw sockets.
>>
>>UNPv1 section 6.3 seems to say that select should work for UDP...Part 2
>>under "Under What Conditions Is a Descriptor Ready" certainly indicates
>>that select should work.
>>
>>Anyway a bug or not, is there a better work around than sleeping? I'm
>>guessing not...
>>
>>Thanks,
>>
>>Andrew
> 
> 
> Well, one workaround would be to figure out a way to have the kernel
> implement the behavior you desire. :)
> 
> I doubt that anyone will put effort into this problem soon; it looks like
> it would be quite a large change to the network stack, and we all have
> plenty of projects to work on.
> 
> Maybe you could figure out where in the kernel the ENOBUFS is occuring,
> and then add a tsleep which would be woken when the transmit queue cleared
> a bit.  That would introduce unexpected blocking, but I can't imagine that
> waiting for a few packets to exit the queue would take much time.

I traced it down when this topic came up the first time a couple of
weeks ago.  The ENOBUFS happens at the interface output queue when
it is full.  You better not put a tsleep in there.

-- 
Andre


More information about the freebsd-hackers mailing list