Use exact addrlen in sendmsg()
This commit is contained in:
15
mud.c
15
mud.c
@@ -207,6 +207,13 @@ void mud_unmapv4 (struct sockaddr *addr)
|
|||||||
memcpy(addr, &sin, sizeof(sin));
|
memcpy(addr, &sin, sizeof(sin));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
size_t mud_addrlen (struct sockaddr_storage *addr)
|
||||||
|
{
|
||||||
|
return (addr->ss_family == AF_INET) ? sizeof(struct sockaddr_in)
|
||||||
|
: sizeof(struct sockaddr_in6);
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
int mud_addrinfo (struct sockaddr_storage *addr, const char *host, int port)
|
int mud_addrinfo (struct sockaddr_storage *addr, const char *host, int port)
|
||||||
{
|
{
|
||||||
@@ -249,7 +256,7 @@ ssize_t mud_send_path (struct mud *mud, struct path *path, uint64_t now,
|
|||||||
|
|
||||||
struct msghdr msg = {
|
struct msghdr msg = {
|
||||||
.msg_name = &path->addr,
|
.msg_name = &path->addr,
|
||||||
.msg_namelen = sizeof(path->addr),
|
.msg_namelen = mud_addrlen(&path->addr),
|
||||||
.msg_iov = &iov,
|
.msg_iov = &iov,
|
||||||
.msg_iovlen = 1,
|
.msg_iovlen = 1,
|
||||||
.msg_control = path->ctrl.data,
|
.msg_control = path->ctrl.data,
|
||||||
@@ -575,12 +582,8 @@ int mud_create_socket (int port, int v4, int v6)
|
|||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
socklen_t addrlen = (addr.ss_family == AF_INET)
|
|
||||||
? sizeof(struct sockaddr_in)
|
|
||||||
: sizeof(struct sockaddr_in6);
|
|
||||||
|
|
||||||
if (mud_setup_socket(fd, v4, v6) ||
|
if (mud_setup_socket(fd, v4, v6) ||
|
||||||
bind(fd, (struct sockaddr *)&addr, addrlen)) {
|
bind(fd, (struct sockaddr *)&addr, mud_addrlen(&addr))) {
|
||||||
int err = errno;
|
int err = errno;
|
||||||
close(fd);
|
close(fd);
|
||||||
errno = err;
|
errno = err;
|
||||||
|
|||||||
Reference in New Issue
Block a user