Non-blocking I/O on bulk endpoints

Hans Petter Selasky hselasky at c2i.net
Wed Jan 25 08:32:34 PST 2006


On Sunday 22 January 2006 16:02, Robert Bruce wrote:
> If I open a USB endpoint with the O_NONBLOCK bit set, it works
> okay if it is an "interrupt" endpoint, and will return EWOULDBLOCK
> for a read() if there is no data.  But if it is a "bulk" endpoint,
> the read() will block.  So I tried using select() to find out if
> there was data available before trying to read it.  But select()
> seems to work properly only for "interrupt" endpoints.  On a
> "bulk" endpoint, select() always reports that there is data ready
> to be read, even when there is not.
>
> Is there any way to do non-blocking I/O on a bulk endpoint?
>
> I looked at sys/dev/usb/ugen.c, and it looks like non-blocking
> I/O is intentionally left out for bulk endpoints.  So maybe
> there is something that makes it difficult to implement.
>
> I am running FreeBSD 6.0, on an AMD64, if that makes any
> difference.
>
>  -bob

No. Though one might want to have something like it.

--HPS


More information about the freebsd-usb mailing list