@@ -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
269274int
@@ -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 }
@@ -693,21 +698,18 @@ os_socket_get_linger(bh_socket_t socket, bool *is_enabled, int *linger_s)
693698 return BHT_ERROR ;
694699}
695700
696- // TCP_NODELAY Disable TCP buffering (ignored, for compatibility)
697701int
698702os_socket_set_tcp_no_delay (bh_socket_t socket , bool is_enabled )
699703{
700- errno = ENOSYS ;
701-
702- return BHT_ERROR ;
704+ return os_socket_setbooloption (socket , IPPROTO_TCP , TCP_NODELAY ,
705+ is_enabled );
703706}
704707
705708int
706709os_socket_get_tcp_no_delay (bh_socket_t socket , bool * is_enabled )
707710{
708- errno = ENOSYS ;
709-
710- return BHT_ERROR ;
711+ return os_socket_getbooloption (socket , IPPROTO_TCP , TCP_NODELAY ,
712+ is_enabled );
711713}
712714
713715int
@@ -760,17 +762,17 @@ os_socket_get_tcp_keep_idle(bh_socket_t socket, uint32_t *time_s)
760762 socklen_t time_s_len = sizeof (time_s_int );
761763
762764#ifdef TCP_KEEPIDLE
763- if (zsock_setsockopt (socket -> fd , IPPROTO_TCP , TCP_KEEPIDLE , & time_s_int ,
764- time_s_len )
765+ if (zsock_getsockopt (socket -> fd , IPPROTO_TCP , TCP_KEEPIDLE , & time_s_int ,
766+ & time_s_len )
765767 != 0 ) {
766768 return BHT_ERROR ;
767769 }
768770 * time_s = (uint32 )time_s_int ;
769771
770772 return BHT_OK ;
771773#elif defined(TCP_KEEPALIVE )
772- if (zsock_setsockopt (socket -> fd , IPPROTO_TCP , TCP_KEEPALIVE , & time_s_int ,
773- time_s_len )
774+ if (zsock_getsockopt (socket -> fd , IPPROTO_TCP , TCP_KEEPALIVE , & time_s_int ,
775+ & time_s_len )
774776 != 0 ) {
775777 return BHT_ERROR ;
776778 }
@@ -856,17 +858,37 @@ os_socket_get_tcp_fastopen_connect(bh_socket_t socket, bool *is_enabled)
856858int
857859os_socket_set_ip_multicast_loop (bh_socket_t socket , bool ipv6 , bool is_enabled )
858860{
859- errno = ENOSYS ;
860-
861- return BHT_ERROR ;
861+ if (ipv6 ) {
862+ #ifdef IPPROTO_IPV6
863+ return os_socket_setbooloption (socket , IPPROTO_IPV6 ,
864+ IPV6_MULTICAST_LOOP , is_enabled );
865+ #else
866+ errno = EAFNOSUPPORT ;
867+ return BHT_ERROR ;
868+ #endif
869+ }
870+ else {
871+ return os_socket_setbooloption (socket , IPPROTO_IP , IP_MULTICAST_LOOP ,
872+ is_enabled );
873+ }
862874}
863875
864876int
865877os_socket_get_ip_multicast_loop (bh_socket_t socket , bool ipv6 , bool * is_enabled )
866878{
867- errno = ENOSYS ;
868-
869- return BHT_ERROR ;
879+ if (ipv6 ) {
880+ #ifdef IPPROTO_IPV6
881+ return os_socket_getbooloption (socket , IPPROTO_IPV6 ,
882+ IPV6_MULTICAST_LOOP , is_enabled );
883+ #else
884+ errno = EAFNOSUPPORT ;
885+ return BHT_ERROR ;
886+ #endif
887+ }
888+ else {
889+ return os_socket_getbooloption (socket , IPPROTO_IP , IP_MULTICAST_LOOP ,
890+ is_enabled );
891+ }
870892}
871893
872894int
@@ -965,13 +987,13 @@ os_socket_set_ip_ttl(bh_socket_t socket, uint8_t ttl_s)
965987int
966988os_socket_get_ip_ttl (bh_socket_t socket , uint8_t * ttl_s )
967989{
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 ) {
990+ /* Most socket-level options utilize an int argument for optval */
991+ int opt ;
992+ socklen_t opt_len = sizeof (opt );
993+ if (zsock_getsockopt (socket -> fd , IPPROTO_IP , IP_TTL , & opt , & opt_len ) != 0 ) {
973994 return BHT_ERROR ;
974995 }
996+ * ttl_s = (uint8_t )opt ;
975997
976998 return BHT_OK ;
977999}
@@ -991,13 +1013,15 @@ os_socket_set_ip_multicast_ttl(bh_socket_t socket, uint8_t ttl_s)
9911013int
9921014os_socket_get_ip_multicast_ttl (bh_socket_t socket , uint8_t * ttl_s )
9931015{
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 )
1016+ /* Most socket-level options utilize an int argument for optval */
1017+ int opt ;
1018+ socklen_t opt_len = sizeof (opt );
1019+ if (zsock_getsockopt (socket -> fd , IPPROTO_IP , IP_MULTICAST_TTL , & opt ,
1020+ & opt_len )
9981021 != 0 ) {
9991022 return BHT_ERROR ;
10001023 }
1024+ * ttl_s = (uint8_t )opt ;
10011025
10021026 return BHT_OK ;
10031027}
@@ -1059,4 +1083,4 @@ int
10591083os_poll (os_poll_file_handle * fds , os_nfds_t nfs , int timeout )
10601084{
10611085 return zsock_poll (fds , nfs , timeout );
1062- }
1086+ }
0 commit comments