Skip to content

Commit

Permalink
Allow defining hints without exact socket type or address family (byt…
Browse files Browse the repository at this point in the history
  • Loading branch information
loganek authored Jul 4, 2023
1 parent d1c9df1 commit 8ad78a8
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 5 deletions.
4 changes: 3 additions & 1 deletion core/iwasm/libraries/lib-socket/inc/wasi_socket_ext.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ extern "C" {
#endif

typedef enum {
/* Used only for sock_addr_resolve hints */
SOCKET_ANY = -1,
SOCKET_DGRAM = 0,
SOCKET_STREAM,
} __wasi_sock_type_t;
Expand Down Expand Up @@ -84,7 +86,7 @@ typedef struct __wasi_addr_t {
} addr;
} __wasi_addr_t;

typedef enum { INET4 = 0, INET6 } __wasi_address_family_t;
typedef enum { INET4 = 0, INET6, INET_UNSPEC } __wasi_address_family_t;

typedef struct __wasi_addr_info_t {
__wasi_addr_t addr;
Expand Down
5 changes: 5 additions & 0 deletions core/iwasm/libraries/lib-socket/src/wasi/wasi_socket_ext.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,9 @@ addrinfo_hints_to_wasi_hints(const struct addrinfo *hints,
case AF_INET6:
wasi_hints->family = INET6;
break;
case AF_UNSPEC:
wasi_hints->family = INET_UNSPEC;
break;
default:
return __WASI_ERRNO_AFNOSUPPORT;
}
Expand All @@ -440,6 +443,8 @@ addrinfo_hints_to_wasi_hints(const struct addrinfo *hints,
case SOCK_DGRAM:
wasi_hints->type = SOCKET_DGRAM;
break;
case 0:
wasi_hints->type = SOCKET_ANY;
default:
return __WASI_ERRNO_NOTSUP;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,8 @@ _Static_assert(offsetof(__wasi_subscription_t, u) == 8, "witx calculated offset"

/* keep syncing with wasi_socket_ext.h */
typedef enum {
/* Used only for sock_addr_resolve hints */
SOCKET_ANY = -1,
SOCKET_DGRAM = 0,
SOCKET_STREAM,
} __wasi_sock_type_t;
Expand Down Expand Up @@ -605,7 +607,7 @@ typedef struct __wasi_addr_t {
} addr;
} __wasi_addr_t;

typedef enum { INET4 = 0, INET6 } __wasi_address_family_t;
typedef enum { INET4 = 0, INET6, INET_UNSPEC } __wasi_address_family_t;

typedef struct __wasi_addr_info_t {
__wasi_addr_t addr;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3102,9 +3102,12 @@ wasi_ssp_sock_addr_resolve(
}

int ret = os_socket_addr_resolve(
host, service, hints->hints_enabled ? &hints_is_tcp : NULL,
hints->hints_enabled ? &hints_is_ipv4 : NULL, wamr_addr_info,
addr_info_size, &_max_info_size);
host, service,
hints->hints_enabled && hints->type != SOCKET_ANY ? &hints_is_tcp
: NULL,
hints->hints_enabled && hints->family != INET_UNSPEC ? &hints_is_ipv4
: NULL,
wamr_addr_info, addr_info_size, &_max_info_size);

if (ret != BHT_OK) {
wasm_runtime_free(wamr_addr_info);
Expand Down

0 comments on commit 8ad78a8

Please sign in to comment.