49 lines
1.7 KiB
Diff
49 lines
1.7 KiB
Diff
From 34a090b2cfb88cb2e711d02c0f3eddf3a3656fac Mon Sep 17 00:00:00 2001
|
|
From: compile_success <980965867@qq.com>
|
|
Date: Fri, 19 Jul 2024 07:34:47 +0000
|
|
Subject: [PATCH] support kernel connect
|
|
|
|
---
|
|
src/lstack/api/lstack_epoll.c | 2 +-
|
|
src/lstack/api/lstack_wrap.c | 10 +++++++++-
|
|
2 files changed, 10 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c
|
|
index 417499b..6426de4 100644
|
|
--- a/src/lstack/api/lstack_epoll.c
|
|
+++ b/src/lstack/api/lstack_epoll.c
|
|
@@ -439,7 +439,7 @@ int32_t lstack_rtw_epoll_ctl(int32_t epfd, int32_t op, int32_t fd, struct epoll_
|
|
|
|
struct wakeup_poll *wakeup = epoll_sock->wakeup;
|
|
struct lwip_sock *sock = lwip_get_socket(fd);
|
|
- if (POSIX_IS_CLOSED(sock)) {
|
|
+ if (POSIX_IS_CLOSED(sock) || POSIX_IS_TYPE(sock, POSIX_KERNEL)) {
|
|
return posix_api->epoll_ctl_fn(epfd, op, fd, event);
|
|
}
|
|
|
|
diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c
|
|
index b19990e..a6ea485 100644
|
|
--- a/src/lstack/api/lstack_wrap.c
|
|
+++ b/src/lstack/api/lstack_wrap.c
|
|
@@ -317,8 +317,16 @@ static int32_t do_connect(int32_t s, const struct sockaddr *name, socklen_t name
|
|
ret = posix_api->connect_fn(s, name, namelen);
|
|
POSIX_SET_TYPE(sock, POSIX_KERNEL);
|
|
} else {
|
|
+ /* When the socket is POSIX_LWIP_OR_KERNEL, connect to lwip first and then connect to kernel. */
|
|
ret = g_wrap_api->connect_fn(s, name, namelen);
|
|
- POSIX_SET_TYPE(sock, POSIX_LWIP);
|
|
+ if (ret == 0) {
|
|
+ POSIX_SET_TYPE(sock, POSIX_LWIP);
|
|
+ } else {
|
|
+ ret = posix_api->connect_fn(s, name, namelen);
|
|
+ if (ret == 0) {
|
|
+ POSIX_SET_TYPE(sock, POSIX_KERNEL);
|
|
+ }
|
|
+ }
|
|
}
|
|
|
|
return ret;
|
|
--
|
|
2.33.0
|
|
|