From be5b07faae1fa027fbfb62f296f67c1b4c12e8a3 Mon Sep 17 00:00:00 2001 From: BV-WebDev <19169837+BV-WebDev@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:31:40 +0000 Subject: [PATCH] adoptSocket: add optional ip parameter for the ip to be correctly set in the open handler --- src/App.h | 12 ++++++------ src/HttpContext.h | 6 +++--- src/LocalCluster.h | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/App.h b/src/App.h index 9a59c072d..cece7b843 100644 --- a/src/App.h +++ b/src/App.h @@ -593,7 +593,7 @@ struct TemplatedApp { } /* Register event handler for accepted FD. Can be used together with adoptSocket. */ - TemplatedApp &&preOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)(struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR)) { + TemplatedApp &&preOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)(struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR, char *, int)) { httpContext->onPreOpen(handler); return std::move(static_cast(*this)); } @@ -614,7 +614,7 @@ struct TemplatedApp { /* Add this app to httpContextData list over child apps and set onPreOpen */ httpContext->getSocketContextData()->childApps.push_back((void *) app); - httpContext->onPreOpen([](struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd) -> LIBUS_SOCKET_DESCRIPTOR { + httpContext->onPreOpen([](struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd, char *ip, int ip_length) -> LIBUS_SOCKET_DESCRIPTOR { HttpContext *httpContext = (HttpContext *) context; @@ -634,9 +634,9 @@ struct TemplatedApp { //std::cout << "Loop is " << receivingApp->getLoop() << std::endl; - receivingApp->getLoop()->defer([fd, receivingApp]() { + receivingApp->getLoop()->defer([fd, ipStore = std::vector(ip, ip + ip_length), receivingApp]() { //std::cout << "About to adopt socket " << fd << " on receivingApp " << receivingApp << std::endl; - receivingApp->adoptSocket(fd); + receivingApp->adoptSocket(fd, std::string_view(ipStore.data(), ipStore.size())); //std::cout << "Done " << std::endl; }); @@ -650,8 +650,8 @@ struct TemplatedApp { } /* adopt an externally accepted socket */ - TemplatedApp &&adoptSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd) { - httpContext->adoptAcceptedSocket(accepted_fd); + TemplatedApp &&adoptSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd, std::string_view ip = std::string_view()) { + httpContext->adoptAcceptedSocket(accepted_fd, (char *) ip.data(), (int) ip.length()); return std::move(static_cast(*this)); } diff --git a/src/HttpContext.h b/src/HttpContext.h index de3b54a3b..79de776b8 100644 --- a/src/HttpContext.h +++ b/src/HttpContext.h @@ -506,13 +506,13 @@ struct HttpContext { return us_socket_context_listen_unix(SSL, getSocketContext(), path, options, sizeof(HttpResponseData)); } - void onPreOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)(struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR)) { + void onPreOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)(struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR, char *, int)) { us_socket_context_on_pre_open(SSL, getSocketContext(), handler); } /* Adopt an externally accepted socket into this HttpContext */ - us_socket_t *adoptAcceptedSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd) { - return us_adopt_accepted_socket(SSL, getSocketContext(), accepted_fd, sizeof(HttpResponseData), 0, 0); + us_socket_t *adoptAcceptedSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd, char *ip, int ip_length) { + return us_adopt_accepted_socket(SSL, getSocketContext(), accepted_fd, sizeof(HttpResponseData), ip, ip_length); } }; diff --git a/src/LocalCluster.h b/src/LocalCluster.h index f9ed68932..7fdd8681c 100644 --- a/src/LocalCluster.h +++ b/src/LocalCluster.h @@ -34,7 +34,7 @@ struct LocalCluster { cb(*app); - app->preOpen([](struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd) -> LIBUS_SOCKET_DESCRIPTOR { + app->preOpen([](struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd, char *ip, int ip_length) -> LIBUS_SOCKET_DESCRIPTOR { std::ignore = context; @@ -42,8 +42,8 @@ struct LocalCluster { //std::cout << "About to load balance " << fd << " to " << roundRobin << std::endl; auto receivingApp = apps[roundRobin]; - apps[roundRobin]->getLoop()->defer([fd, receivingApp]() { - receivingApp->adoptSocket(fd); + apps[roundRobin]->getLoop()->defer([fd, ipStore = std::vector(ip, ip + ip_length), receivingApp]() { + receivingApp->adoptSocket(fd, std::string_view(ipStore.data(), ipStore.size())); }); roundRobin = (roundRobin + 1) % hardwareConcurrency;