mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2026-03-03 01:51:32 +00:00
fix: zephyr sockets: fix get/set sockopt usages.
In multiple places, setsockopt is used when getsockopt shall be used, and vice-versa. Additionally, pointer isn't checked correctly in two places, this commit fixes those as well. Per man(7), most socket-level options utilize an int argument for optval. Use those for ttl. Signed-off-by: Krisztian Szilvasi <34309983+kr-t@users.noreply.github.com>
This commit is contained in:
parent
0c9fe614ae
commit
6d8a33cda6
|
|
@ -173,7 +173,7 @@ os_socket_getbooloption(bh_socket_t socket, int level, int optname,
|
|||
int optval;
|
||||
socklen_t optval_size = sizeof(optval);
|
||||
|
||||
if (zsock_setsockopt(socket->fd, level, optname, &optval, optval_size)
|
||||
if (zsock_getsockopt(socket->fd, level, optname, &optval, &optval_size)
|
||||
!= 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
|
@ -190,7 +190,7 @@ os_socket_create(bh_socket_t *sock, bool is_ipv4, bool is_tcp)
|
|||
|
||||
*(sock) = BH_MALLOC(sizeof(zephyr_handle));
|
||||
|
||||
if (!sock) {
|
||||
if (!*sock) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -262,8 +262,13 @@ os_socket_settimeout(bh_socket_t socket, uint64 timeout_us)
|
|||
timeout.tv_sec = timeout_us / 1000000;
|
||||
timeout.tv_usec = timeout_us % 1000000;
|
||||
|
||||
return zsock_setsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &timeout,
|
||||
sizeof(timeout));
|
||||
if (zsock_setsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &timeout,
|
||||
sizeof(timeout))
|
||||
!= 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
||||
return BHT_OK;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -277,7 +282,7 @@ os_socket_accept(bh_socket_t server_sock, bh_socket_t *sock, void *addr,
|
|||
unsigned int *addrlen)
|
||||
{
|
||||
*sock = BH_MALLOC(sizeof(zephyr_handle));
|
||||
if (!sock) {
|
||||
if (!*sock) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -609,7 +614,7 @@ os_socket_get_send_timeout(bh_socket_t socket, uint64 *timeout_us)
|
|||
struct timeval tv;
|
||||
socklen_t tv_len = sizeof(tv);
|
||||
|
||||
if (zsock_setsockopt(socket->fd, SOL_SOCKET, SO_SNDTIMEO, &tv, tv_len)
|
||||
if (zsock_getsockopt(socket->fd, SOL_SOCKET, SO_SNDTIMEO, &tv, &tv_len)
|
||||
!= 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
|
@ -639,7 +644,7 @@ os_socket_get_recv_timeout(bh_socket_t socket, uint64 *timeout_us)
|
|||
struct timeval tv;
|
||||
socklen_t tv_len = sizeof(tv);
|
||||
|
||||
if (zsock_setsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &tv, tv_len)
|
||||
if (zsock_getsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &tv, &tv_len)
|
||||
!= 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
|
@ -760,8 +765,8 @@ os_socket_get_tcp_keep_idle(bh_socket_t socket, uint32_t *time_s)
|
|||
socklen_t time_s_len = sizeof(time_s_int);
|
||||
|
||||
#ifdef TCP_KEEPIDLE
|
||||
if (zsock_setsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPIDLE, &time_s_int,
|
||||
time_s_len)
|
||||
if (zsock_getsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPIDLE, &time_s_int,
|
||||
&time_s_len)
|
||||
!= 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
|
@ -769,8 +774,8 @@ os_socket_get_tcp_keep_idle(bh_socket_t socket, uint32_t *time_s)
|
|||
|
||||
return BHT_OK;
|
||||
#elif defined(TCP_KEEPALIVE)
|
||||
if (zsock_setsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPALIVE, &time_s_int,
|
||||
time_s_len)
|
||||
if (zsock_getsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPALIVE, &time_s_int,
|
||||
&time_s_len)
|
||||
!= 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
|
|
@ -965,13 +970,13 @@ os_socket_set_ip_ttl(bh_socket_t socket, uint8_t ttl_s)
|
|||
int
|
||||
os_socket_get_ip_ttl(bh_socket_t socket, uint8_t *ttl_s)
|
||||
{
|
||||
socklen_t opt_len = sizeof(*ttl_s);
|
||||
|
||||
if (zsock_setsockopt(socket->fd, IPPROTO_IP, IP_MULTICAST_TTL, ttl_s,
|
||||
opt_len)
|
||||
!= 0) {
|
||||
/* Most socket-level options utilize an int argument for optval */
|
||||
int opt;
|
||||
socklen_t opt_len = sizeof(opt);
|
||||
if (zsock_getsockopt(socket->fd, IPPROTO_IP, IP_TTL, &opt, &opt_len) != 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
*ttl_s = (uint8_t)opt;
|
||||
|
||||
return BHT_OK;
|
||||
}
|
||||
|
|
@ -991,13 +996,15 @@ os_socket_set_ip_multicast_ttl(bh_socket_t socket, uint8_t ttl_s)
|
|||
int
|
||||
os_socket_get_ip_multicast_ttl(bh_socket_t socket, uint8_t *ttl_s)
|
||||
{
|
||||
socklen_t opt_len = sizeof(*ttl_s);
|
||||
|
||||
if (zsock_setsockopt(socket->fd, IPPROTO_IP, IP_MULTICAST_TTL, ttl_s,
|
||||
opt_len)
|
||||
/* Most socket-level options utilize an int argument for optval */
|
||||
int opt;
|
||||
socklen_t opt_len = sizeof(opt);
|
||||
if (zsock_getsockopt(socket->fd, IPPROTO_IP, IP_MULTICAST_TTL, &opt,
|
||||
&opt_len)
|
||||
!= 0) {
|
||||
return BHT_ERROR;
|
||||
}
|
||||
*ttl_s = (uint8_t)opt;
|
||||
|
||||
return BHT_OK;
|
||||
}
|
||||
|
|
@ -1059,4 +1066,4 @@ int
|
|||
os_poll(os_poll_file_handle *fds, os_nfds_t nfs, int timeout)
|
||||
{
|
||||
return zsock_poll(fds, nfs, timeout);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user