Skip to content

Commit 6d8a33c

Browse files
committed
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>
1 parent 0c9fe61 commit 6d8a33c

1 file changed

Lines changed: 28 additions & 21 deletions

File tree

core/shared/platform/zephyr/zephyr_socket.c

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ os_socket_getbooloption(bh_socket_t socket, int level, int optname,
173173
int optval;
174174
socklen_t optval_size = sizeof(optval);
175175

176-
if (zsock_setsockopt(socket->fd, level, optname, &optval, optval_size)
176+
if (zsock_getsockopt(socket->fd, level, optname, &optval, &optval_size)
177177
!= 0) {
178178
return BHT_ERROR;
179179
}
@@ -190,7 +190,7 @@ os_socket_create(bh_socket_t *sock, bool is_ipv4, bool is_tcp)
190190

191191
*(sock) = BH_MALLOC(sizeof(zephyr_handle));
192192

193-
if (!sock) {
193+
if (!*sock) {
194194
return BHT_ERROR;
195195
}
196196

@@ -262,8 +262,13 @@ os_socket_settimeout(bh_socket_t socket, uint64 timeout_us)
262262
timeout.tv_sec = timeout_us / 1000000;
263263
timeout.tv_usec = timeout_us % 1000000;
264264

265-
return zsock_setsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &timeout,
266-
sizeof(timeout));
265+
if (zsock_setsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &timeout,
266+
sizeof(timeout))
267+
!= 0) {
268+
return BHT_ERROR;
269+
}
270+
271+
return BHT_OK;
267272
}
268273

269274
int
@@ -277,7 +282,7 @@ os_socket_accept(bh_socket_t server_sock, bh_socket_t *sock, void *addr,
277282
unsigned int *addrlen)
278283
{
279284
*sock = BH_MALLOC(sizeof(zephyr_handle));
280-
if (!sock) {
285+
if (!*sock) {
281286
return BHT_ERROR;
282287
}
283288

@@ -609,7 +614,7 @@ os_socket_get_send_timeout(bh_socket_t socket, uint64 *timeout_us)
609614
struct timeval tv;
610615
socklen_t tv_len = sizeof(tv);
611616

612-
if (zsock_setsockopt(socket->fd, SOL_SOCKET, SO_SNDTIMEO, &tv, tv_len)
617+
if (zsock_getsockopt(socket->fd, SOL_SOCKET, SO_SNDTIMEO, &tv, &tv_len)
613618
!= 0) {
614619
return BHT_ERROR;
615620
}
@@ -639,7 +644,7 @@ os_socket_get_recv_timeout(bh_socket_t socket, uint64 *timeout_us)
639644
struct timeval tv;
640645
socklen_t tv_len = sizeof(tv);
641646

642-
if (zsock_setsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &tv, tv_len)
647+
if (zsock_getsockopt(socket->fd, SOL_SOCKET, SO_RCVTIMEO, &tv, &tv_len)
643648
!= 0) {
644649
return BHT_ERROR;
645650
}
@@ -760,17 +765,17 @@ os_socket_get_tcp_keep_idle(bh_socket_t socket, uint32_t *time_s)
760765
socklen_t time_s_len = sizeof(time_s_int);
761766

762767
#ifdef TCP_KEEPIDLE
763-
if (zsock_setsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPIDLE, &time_s_int,
764-
time_s_len)
768+
if (zsock_getsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPIDLE, &time_s_int,
769+
&time_s_len)
765770
!= 0) {
766771
return BHT_ERROR;
767772
}
768773
*time_s = (uint32)time_s_int;
769774

770775
return BHT_OK;
771776
#elif defined(TCP_KEEPALIVE)
772-
if (zsock_setsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPALIVE, &time_s_int,
773-
time_s_len)
777+
if (zsock_getsockopt(socket->fd, IPPROTO_TCP, TCP_KEEPALIVE, &time_s_int,
778+
&time_s_len)
774779
!= 0) {
775780
return BHT_ERROR;
776781
}
@@ -965,13 +970,13 @@ os_socket_set_ip_ttl(bh_socket_t socket, uint8_t ttl_s)
965970
int
966971
os_socket_get_ip_ttl(bh_socket_t socket, uint8_t *ttl_s)
967972
{
968-
socklen_t opt_len = sizeof(*ttl_s);
969-
970-
if (zsock_setsockopt(socket->fd, IPPROTO_IP, IP_MULTICAST_TTL, ttl_s,
971-
opt_len)
972-
!= 0) {
973+
/* Most socket-level options utilize an int argument for optval */
974+
int opt;
975+
socklen_t opt_len = sizeof(opt);
976+
if (zsock_getsockopt(socket->fd, IPPROTO_IP, IP_TTL, &opt, &opt_len) != 0) {
973977
return BHT_ERROR;
974978
}
979+
*ttl_s = (uint8_t)opt;
975980

976981
return BHT_OK;
977982
}
@@ -991,13 +996,15 @@ os_socket_set_ip_multicast_ttl(bh_socket_t socket, uint8_t ttl_s)
991996
int
992997
os_socket_get_ip_multicast_ttl(bh_socket_t socket, uint8_t *ttl_s)
993998
{
994-
socklen_t opt_len = sizeof(*ttl_s);
995-
996-
if (zsock_setsockopt(socket->fd, IPPROTO_IP, IP_MULTICAST_TTL, ttl_s,
997-
opt_len)
999+
/* Most socket-level options utilize an int argument for optval */
1000+
int opt;
1001+
socklen_t opt_len = sizeof(opt);
1002+
if (zsock_getsockopt(socket->fd, IPPROTO_IP, IP_MULTICAST_TTL, &opt,
1003+
&opt_len)
9981004
!= 0) {
9991005
return BHT_ERROR;
10001006
}
1007+
*ttl_s = (uint8_t)opt;
10011008

10021009
return BHT_OK;
10031010
}
@@ -1059,4 +1066,4 @@ int
10591066
os_poll(os_poll_file_handle *fds, os_nfds_t nfs, int timeout)
10601067
{
10611068
return zsock_poll(fds, nfs, timeout);
1062-
}
1069+
}

0 commit comments

Comments
 (0)