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