diff options
-rw-r--r-- | lib/libnv/msgio.c | 24 | ||||
-rw-r--r-- | lib/libnv/msgio.h | 2 | ||||
-rw-r--r-- | lib/libnv/nvlist.c | 8 |
3 files changed, 5 insertions, 29 deletions
diff --git a/lib/libnv/msgio.c b/lib/libnv/msgio.c index a37d1cd..0a0bd7f 100644 --- a/lib/libnv/msgio.c +++ b/lib/libnv/msgio.c @@ -113,30 +113,6 @@ fd_wait(int fd, bool doread) NULL, NULL); } -int -msg_peek(int sock, void *buf, size_t size) -{ - ssize_t done; - - PJDLOG_ASSERT(sock >= 0); - PJDLOG_ASSERT(size > 0); - - do { - fd_wait(sock, true); - done = recv(sock, buf, size, MSG_PEEK | MSG_WAITALL); - if (done == -1) { - if (errno == EAGAIN || errno == EINTR) - continue; - return (-1); - } else if (done == 0) { - errno = ENOTCONN; - return (-1); - } - } while (done != (ssize_t)size); - - return (0); -} - static int msg_recv(int sock, struct msghdr *msg) { diff --git a/lib/libnv/msgio.h b/lib/libnv/msgio.h index c6de92d..fd5e462 100644 --- a/lib/libnv/msgio.h +++ b/lib/libnv/msgio.h @@ -38,8 +38,6 @@ struct cmsgcred; struct iovec; struct msghdr; -int msg_peek(int sock, void *buf, size_t size); - int cred_send(int sock); int cred_recv(int sock, struct cmsgcred *cred); diff --git a/lib/libnv/nvlist.c b/lib/libnv/nvlist.c index 323b2c8..299d60e 100644 --- a/lib/libnv/nvlist.c +++ b/lib/libnv/nvlist.c @@ -724,11 +724,11 @@ nvlist_recv(int sock) { struct nvlist_header nvlhdr; nvlist_t *nvl, *ret; + unsigned char *buf; size_t nfds, size; - void *buf; int serrno, *fds; - if (msg_peek(sock, &nvlhdr, sizeof(nvlhdr)) == -1) + if (buf_recv(sock, &nvlhdr, sizeof(nvlhdr)) == -1) return (NULL); if (!nvlist_check_header(&nvlhdr)) @@ -741,10 +741,12 @@ nvlist_recv(int sock) if (buf == NULL) return (NULL); + memcpy(buf, &nvlhdr, sizeof(nvlhdr)); + ret = NULL; fds = NULL; - if (buf_recv(sock, buf, size) == -1) + if (buf_recv(sock, buf + sizeof(nvlhdr), size - sizeof(nvlhdr)) == -1) goto out; if (nfds > 0) { |