$NetBSD: patch-an,v 1.2 2002/04/25 12:17:05 agc Exp $ Also handle EINVAL error to writev(2). --- src/IIOP/giop-msg-buffer.c.orig Mon Mar 11 13:40:02 2002 +++ src/IIOP/giop-msg-buffer.c @@ -165,6 +165,37 @@ return msgbuf; } +#ifdef __NetBSD__ +/* NetBSD returns EINVAL if we try to send > IOV_MAX iovecs */ +/* wrap writev so that we only ever try to send IOV_MAX at most */ + +#include + +static int +wrap_writev(int fd, const struct iovec *vector, size_t count) +{ + size_t n; + int ret; + int wc; + + ret = 0; + while (count > 0) { + n = MIN(IOV_MAX, count); + if ((wc = writev(fd, vector, n)) < 0) { + break; + } + ret += wc; + vector += n; + count -= n; + } + return ret; +} + +#define writev wrap_writev + +#endif /* __NetBSD__ */ + + gint giop_send_buffer_write(GIOPSendBuffer *send_buffer) {