|
|
|
@ -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); |
|
|
|
} |
|
|
|
|