mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-05-09 13:16:26 +00:00
Fix os_socket_addr_resolve() for IPv6 (#2015)
The function always specified IPv4 socklen to sockaddr_to_bh_sockaddr(), therefore the assertion was failing; however, sockaddr_to_bh_sockaddr() never actually used socklen parameter, so we deleted it completely.
This commit is contained in:
parent
6a3ae689f7
commit
7a3d2bfab6
|
@ -44,7 +44,7 @@ textual_addr_to_sockaddr(const char *textual, int port, struct sockaddr *out,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
|
sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr,
|
||||||
bh_sockaddr_t *bh_sockaddr)
|
bh_sockaddr_t *bh_sockaddr)
|
||||||
{
|
{
|
||||||
switch (sockaddr->sa_family) {
|
switch (sockaddr->sa_family) {
|
||||||
|
@ -52,8 +52,6 @@ sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
|
||||||
{
|
{
|
||||||
struct sockaddr_in *addr = (struct sockaddr_in *)sockaddr;
|
struct sockaddr_in *addr = (struct sockaddr_in *)sockaddr;
|
||||||
|
|
||||||
assert(socklen >= sizeof(struct sockaddr_in));
|
|
||||||
|
|
||||||
bh_sockaddr->port = ntohs(addr->sin_port);
|
bh_sockaddr->port = ntohs(addr->sin_port);
|
||||||
bh_sockaddr->addr_bufer.ipv4 = ntohl(addr->sin_addr.s_addr);
|
bh_sockaddr->addr_bufer.ipv4 = ntohl(addr->sin_addr.s_addr);
|
||||||
bh_sockaddr->is_ipv4 = true;
|
bh_sockaddr->is_ipv4 = true;
|
||||||
|
@ -65,8 +63,6 @@ sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
|
||||||
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)sockaddr;
|
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)sockaddr;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
assert(socklen >= sizeof(struct sockaddr_in6));
|
|
||||||
|
|
||||||
bh_sockaddr->port = ntohs(addr->sin6_port);
|
bh_sockaddr->port = ntohs(addr->sin6_port);
|
||||||
|
|
||||||
for (i = 0; i < sizeof(bh_sockaddr->addr_bufer.ipv6)
|
for (i = 0; i < sizeof(bh_sockaddr->addr_bufer.ipv6)
|
||||||
|
@ -274,8 +270,7 @@ os_socket_recv_from(bh_socket_t socket, void *buf, unsigned int len, int flags,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src_addr && socklen > 0) {
|
if (src_addr && socklen > 0) {
|
||||||
if (sockaddr_to_bh_sockaddr((struct sockaddr *)&sock_addr, socklen,
|
if (sockaddr_to_bh_sockaddr((struct sockaddr *)&sock_addr, src_addr)
|
||||||
src_addr)
|
|
||||||
== BHT_ERROR) {
|
== BHT_ERROR) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -411,9 +406,8 @@ os_socket_addr_resolve(const char *host, const char *service,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sockaddr_to_bh_sockaddr(res->ai_addr,
|
ret =
|
||||||
sizeof(struct sockaddr_in),
|
sockaddr_to_bh_sockaddr(res->ai_addr, &addr_info[pos].sockaddr);
|
||||||
&addr_info[pos].sockaddr);
|
|
||||||
|
|
||||||
if (ret == BHT_ERROR) {
|
if (ret == BHT_ERROR) {
|
||||||
freeaddrinfo(result);
|
freeaddrinfo(result);
|
||||||
|
@ -1014,8 +1008,7 @@ os_socket_addr_local(bh_socket_t socket, bh_sockaddr_t *sockaddr)
|
||||||
return BHT_ERROR;
|
return BHT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, addr_len,
|
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr);
|
||||||
sockaddr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1031,6 +1024,5 @@ os_socket_addr_remote(bh_socket_t socket, bh_sockaddr_t *sockaddr)
|
||||||
return BHT_ERROR;
|
return BHT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, addr_len,
|
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr);
|
||||||
sockaddr);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user