diff --git a/os/Xtrans.c b/os/Xtrans.c index 3c3e25fae4..6b4d1ddf81 100644 --- a/os/Xtrans.c +++ b/os/Xtrans.c @@ -707,7 +707,7 @@ int _XSERVTransRead (XtransConnInfo ciptr, char *buf, int size) ssize_t _XSERVTransWrite (XtransConnInfo ciptr, const char *buf, size_t size) { - return ciptr->transptr->Write (ciptr, buf, size); + return ciptr->transptr->Writev (ciptr, buf, size); } #if XTRANS_SEND_FDS diff --git a/os/Xtransint.h b/os/Xtransint.h index 1a83fb1f03..8b624e6e39 100644 --- a/os/Xtransint.h +++ b/os/Xtransint.h @@ -187,7 +187,7 @@ typedef struct _Xtransport { size_t /* size */ ); - ssize_t (*Writev)(XtransConnInfo ciptr, struct iovec *iov, size_t iovcnt); + ssize_t (*Writev)(XtransConnInfo ciptr, const char *buf, size_t size); #if XTRANS_SEND_FDS int (*SendFd)( diff --git a/os/Xtranslcl.c b/os/Xtranslcl.c index 0604217ee5..ae06f09816 100644 --- a/os/Xtranslcl.c +++ b/os/Xtranslcl.c @@ -761,11 +761,11 @@ static ssize_t _XSERVTransLocalWrite(XtransConnInfo ciptr, const char *buf, size return write(ciptr->fd,buf,size); } -static ssize_t _XSERVTransLocalWritev(XtransConnInfo ciptr, struct iovec *iov, size_t iovcnt) +static ssize_t _XSERVTransLocalWritev(XtransConnInfo ciptr, const char *buf, size_t size) { prmsg(2,"LocalWritev(%d,%p,%d)\n", ciptr->fd, (const void *) iov, iovcnt); - return _XSERVTransWriteV(ciptr,iov,iovcnt); + return write(ciptr->fd,buf,size); } static int _XSERVTransLocalDisconnect(XtransConnInfo ciptr) diff --git a/os/Xtranssock.c b/os/Xtranssock.c index c32cc9b792..dde731a9b1 100644 --- a/os/Xtranssock.c +++ b/os/Xtranssock.c @@ -1338,9 +1338,14 @@ static int _XSERVTransSocketRead ( } static ssize_t _XSERVTransSocketWritev ( - XtransConnInfo ciptr, struct iovec *iov, size_t iovcnt) + XtransConnInfo ciptr, const char *buf, size_t size) { - prmsg (2,"SocketWritev(%d,%p,%d)\n", ciptr->fd, (void *) iov, iovcnt); + prmsg (2,"SocketWritev(%d,%p,%ld)\n", ciptr->fd, (void *) buf, (unsigned long)size); + + struct iovec iov = { + .iov_len = size, + .iov_base = (char*)buf, + }; #if XTRANS_SEND_FDS if (ciptr->send_fds) @@ -1351,8 +1356,8 @@ static ssize_t _XSERVTransSocketWritev ( struct msghdr msg = { .msg_name = NULL, .msg_namelen = 0, - .msg_iov = iov, - .msg_iovlen = iovcnt, + .msg_iov = &iov, + .msg_iovlen = 1, .msg_control = cmsgbuf.buf, .msg_controllen = CMSG_LEN(nfd * sizeof(int)) }; @@ -1377,7 +1382,7 @@ static ssize_t _XSERVTransSocketWritev ( return i; } #endif - return _XSERVTransWriteV(ciptr, iov, iovcnt); + return _XSERVTransWriteV(ciptr, &iov, 1); } static ssize_t _XSERVTransSocketWrite ( @@ -1395,11 +1400,7 @@ static ssize_t _XSERVTransSocketWrite ( #if XTRANS_SEND_FDS if (ciptr->send_fds) { - struct iovec iov; - - iov.iov_base = (void *) buf; - iov.iov_len = size; - return _XSERVTransSocketWritev(ciptr, &iov, 1); + return _XSERVTransSocketWritev(ciptr, buf, size); } #endif /* XTRANS_SEND_FDS */ return write (ciptr->fd, buf, size);