On Fri, Oct 26, 2001 at 06:06:59PM +0300, Maxim Sobolev wrote:
> Peter Pentchev wrote:
> > 
> > On Fri, Oct 26, 2001 at 05:49:08PM +0300, Maxim Sobolev wrote:
[snip]
> > >
> > > On the step 3, when marshalling results of the call, daemon
> > > creates a large collection of small buffers (usually 5-10
> > > bytes long each) arranged as array of struct iovec and then
> > > sends this whole buffer to the client using writev(2) call.
> > > In my particular case there were some 2,800 entries in the
> > > buffer and when the daemon tried to send it to the client
> > > writev(2) was returning -1 and setting errno to be EINVAL,
> > > which confused the server and the client causing RPC to
> > > fail.
> > 
> > 2800 entries?  Well, from the writev(2) manual page:
> > 
> >      In addition, writev() may return one of the following errors:
> > 
> >      ...
> > 
> >      [EINVAL]           Iovcnt was less than or equal to 0, or greater than
> >                         UIO_MAXIOV.
> > 
> > And at least on -stable, UIO_MAXIOV is defined as 1024..
> 
> Ah, ok. I've overlooked it somehow.

So basically, you still want a loop, but it could be a writev(2) loop,
not a write(2) loop, to keep some of the writev(2) performance benefit.

G'luck,
Peter

-- 
If the meanings of 'true' and 'false' were switched, then this sentence wouldn't be 
false.

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to