diff --git a/lib/socket.c b/lib/socket.c index 9b7438165..c5ee0674b 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -323,8 +323,10 @@ INLINE ssize_t __ip_recvfrom_options(socket_t *s, void *buf, size_t len, endpoin char ctrl[64]; ZERO(msg); - msg.msg_name = &sin; - msg.msg_namelen = s->family->sockaddr_size; + if (ep) { + msg.msg_name = &sin; + msg.msg_namelen = s->family->sockaddr_size; + } msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_control = ctrl; @@ -336,7 +338,9 @@ INLINE ssize_t __ip_recvfrom_options(socket_t *s, void *buf, size_t len, endpoin ret = recvmsg(s->fd, &msg, 0); if (ret < 0) return ret; - s->family->sockaddr2endpoint(ep, &sin); + + if (ep) + s->family->sockaddr2endpoint(ep, &sin); socket_recvfrom_parse_cmsg(&tv, &to, parse, &msg, CMSG_FIRSTHDR(&msg), CMSG_NXTHDR(&msg, cm)); @@ -373,9 +377,11 @@ static ssize_t __ip6_recvfrom_to(socket_t *s, void *buf, size_t len, endpoint_t static ssize_t __ip_sendmsg(socket_t *s, struct msghdr *mh, const endpoint_t *ep) { struct sockaddr_storage sin; - s->family->endpoint2sockaddr(&sin, ep); - mh->msg_name = &sin; - mh->msg_namelen = s->family->sockaddr_size; + if (ep) { + s->family->endpoint2sockaddr(&sin, ep); + mh->msg_name = &sin; + mh->msg_namelen = s->family->sockaddr_size; + } return sendmsg(s->fd, mh, 0); }