Skip to content

Commit 4e6a337

Browse files
committed
Added "accept4" call to posix port
1 parent 85a345e commit 4e6a337

1 file changed

Lines changed: 31 additions & 2 deletions

File tree

src/port/posix/bsd_socket.c

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ static int (*host_socket ) (int domain, int type, int protocol) = NULL;
8484
static int (*host_bind ) (int sockfd, const struct sockaddr *addr, socklen_t addrlen);
8585
static int (*host_connect ) (int sockfd, const struct sockaddr *addr, socklen_t addrlen);
8686
static 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);
8788
static int (*host_listen ) (int sockfd, int backlog);
8889
static ssize_t (*host_recvfrom) (int sockfd, void *buf, size_t len, int flags, struct sockaddr *addr, socklen_t *addrlen);
8990
static 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+
750778
int 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

Comments
 (0)