From e09613994ea3fee2c5468c48d24d8a6dfb96f8b4 Mon Sep 17 00:00:00 2001 From: hankangkang Date: Mon, 18 Nov 2024 09:18:42 +0800 Subject: [PATCH] openGauss: support kernel accept4 --- src/lstack/api/lstack_wrap.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c index 7d32ef1..7e724cd 100644 --- a/src/lstack/api/lstack_wrap.c +++ b/src/lstack/api/lstack_wrap.c @@ -131,14 +131,22 @@ static int32_t do_accept4(int32_t s, struct sockaddr *addr, socklen_t *addrlen, return posix_api->accept4_fn(s, addr, addrlen, flags); } - int32_t fd = g_wrap_api->accept4_fn(s, addr, addrlen, flags); + int fd = 0; + struct lwip_sock *sock = lwip_get_socket(s); + if (POSIX_HAS_TYPE(sock, POSIX_KERNEL)) { + fd = posix_api->accept4_fn(s, addr, addrlen, flags); + if (fd >= 0) { + return fd; + } + } + + fd = g_wrap_api->accept4_fn(s, addr, addrlen, flags); if (fd >= 0) { - struct lwip_sock *sock = lwip_get_socket(fd); + sock = lwip_get_socket(fd); POSIX_SET_TYPE(sock, POSIX_LWIP); - return fd; } - return posix_api->accept4_fn(s, addr, addrlen, flags); + return fd; } static inline int sock_set_nonblocking(int fd) -- 2.33.0