@@ -84,6 +84,7 @@ static int (*host_socket ) (int domain, int type, int protocol) = NULL;
8484static int (* host_bind ) (int sockfd , const struct sockaddr * addr , socklen_t addrlen );
8585static int (* host_connect ) (int sockfd , const struct sockaddr * addr , socklen_t addrlen );
8686static int (* host_accept ) (int sockfd , struct sockaddr * addr , socklen_t * addrlen );
87+ static int (* host_accept4 ) (int sockfd , struct sockaddr * addr , socklen_t * addrlen , int flags );
8788static int (* host_listen ) (int sockfd , int backlog );
8889static ssize_t (* host_recvfrom ) (int sockfd , void * buf , size_t len , int flags , struct sockaddr * addr , socklen_t * addrlen );
8990static ssize_t (* host_recv ) (int sockfd , void * buf , size_t len , int flags );
@@ -747,6 +748,33 @@ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
747748 conditional_steal_blocking_call (accept , sockfd , addr , addrlen );
748749}
749750
751+ int accept4 (int sockfd , struct sockaddr * addr , socklen_t * addrlen , int flags ) {
752+ if (in_the_stack ) {
753+ return host_accept4 (sockfd , addr , addrlen , flags );
754+ } else {
755+ pthread_mutex_lock (& wolfIP_mutex );
756+ if ((sockfd & (MARK_TCP_SOCKET | MARK_UDP_SOCKET | MARK_ICMP_SOCKET )) != 0 ) {
757+ int __wolfip_retval ;
758+ do {
759+ __wolfip_retval = wolfIP_sock_accept (IPSTACK , sockfd , addr , addrlen );
760+ if (__wolfip_retval == - EAGAIN ) {
761+ usleep (1000 );
762+ }
763+ } while (__wolfip_retval == - EAGAIN );
764+ if (__wolfip_retval < 0 ) {
765+ errno = __wolfip_retval ;
766+ pthread_mutex_unlock (& wolfIP_mutex );
767+ return -1 ;
768+ }
769+ pthread_mutex_unlock (& wolfIP_mutex );
770+ return __wolfip_retval ;
771+ } else {
772+ pthread_mutex_unlock (& wolfIP_mutex );
773+ return host_accept4 (sockfd , addr , addrlen , flags );
774+ }
775+ }
776+ }
777+
750778int connect (int sockfd , const struct sockaddr * addr , socklen_t addrlen ) {
751779 conditional_steal_blocking_call (connect , sockfd , addr , addrlen );
752780}
@@ -831,6 +859,7 @@ void __attribute__((constructor)) init_wolfip_posix() {
831859 swap_socketcall (bind , "bind" );
832860 swap_socketcall (listen , "listen" );
833861 swap_socketcall (accept , "accept" );
862+ swap_socketcall (accept4 , "accept4" );
834863 swap_socketcall (connect , "connect" );
835864 swap_socketcall (sendto , "sendto" );
836865 swap_socketcall (sendmsg , "sendmsg" );
@@ -843,8 +872,8 @@ void __attribute__((constructor)) init_wolfip_posix() {
843872 swap_socketcall (read , "read" );
844873 swap_socketcall (getsockname , "getsockname" );
845874 swap_socketcall (getpeername , "getpeername" );
846- swap_socketcall (setsockopt , "getaddrinfo " );
847- swap_socketcall (getsockopt , "freeaddrinfo " );
875+ swap_socketcall (setsockopt , "setsockopt " );
876+ swap_socketcall (getsockopt , "getsockopt " );
848877 swap_socketcall (poll , "poll" );
849878 swap_socketcall (select , "select" );
850879 swap_socketcall (fcntl , "fcntl" );
0 commit comments