ugen partial write() amount

Anish Mistry mistry.7 at osu.edu
Sat Jun 17 15:54:35 UTC 2006


On Saturday 17 June 2006 03:50, Hans Petter Selasky wrote:
> On Friday 16 June 2006 23:24, Anish Mistry wrote:
> >  I'm trying to reliably recover from a write() timeout using
> > ugen. The problem that I'm having is that when using write() to
> > write data to an endpoint and the write times out there seems no
> > way to figure out the amount of that data that was actually
> > written.  This is a problem when trying to write data to a
> > printer and the paper runs out.  write() will timeout and you are
> > left with no way to figure out where to start sending data since
> > you don't know how much was received by the device before the
> > paper ran out.
> >  It seems this could be possible by modifying the driver by
> > adding and ioctl that would allow you to call bulk transfer and
> > then return the number of bytes written.  Is there a better way
> > of doing?
>
> What about disabling the timeout ?
That works, the problem is that the write() will block causing the 
controller application to be non-responsive and not report the 
condition that caused the failure since it has blocked.
My conclusion so far is that I would need to thread the writing logic 
in the application, and then write my own timeout logic when I notice 
that the write is blocking for longer than our time interval.  At 
least that is the option I can think of without modifying the driver.

-- 
Anish Mistry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-usb/attachments/20060617/faeb89ed/attachment.pgp


More information about the freebsd-usb mailing list