ugen partial write() amount

Anish Mistry mistry.7 at osu.edu
Sat Jun 17 17:28:06 UTC 2006


On Saturday 17 June 2006 13:15, Hans Petter Selasky wrote:
> On Saturday 17 June 2006 17:54, Anish Mistry wrote:
> > 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.
>
> I have some plans to make "ugen" asynchronous. Then you can use
> FIONBIO to set non-blocking mode, and poll the file descriptor.
> That is the solution I see.
Most excellent.  

>
> > 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.
>
> Yes.
I'll go with this approach.

-- 
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/c4154fe1/attachment.pgp


More information about the freebsd-usb mailing list