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