From ecd3af1ac25a1f3feec825ca96206de2513e733e Mon Sep 17 00:00:00 2001 From: Gavin Hayes Date: Fri, 3 May 2024 01:48:18 -0400 Subject: [PATCH] fix nt accept not initializing with SO_UPDATE_ACCEPT_CONTEXT --- libc/sock/accept-nt.c | 10 ++++++---- test/libc/sock/socket_test.c | 2 -- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libc/sock/accept-nt.c b/libc/sock/accept-nt.c index b5dff0705..0f7ce9a93 100644 --- a/libc/sock/accept-nt.c +++ b/libc/sock/accept-nt.c @@ -87,10 +87,6 @@ static int sys_accept_nt_start(int64_t handle, struct NtOverlapped *overlap, if (g_acceptex.lpAcceptEx(args->listensock, handle, args->buffer, 0, sizeof(args->buffer->local), sizeof(args->buffer->remote), 0, overlap)) { - // inherit properties of listening socket - unassert(!__imp_setsockopt(args->listensock, SOL_SOCKET, - kNtSoUpdateAcceptContext, &handle, - sizeof(handle))); return 0; } else { return -1; @@ -123,6 +119,12 @@ textwindows int sys_accept_nt(struct Fd *f, struct sockaddr_storage *addr, goto Finish; } + // inherit properties of listening socket + // errors ignored as if f->handle was created before forking + // this fails with WSAENOTSOCK + __imp_setsockopt(resources.handle, SOL_SOCKET, kNtSoUpdateAcceptContext, + &f->handle, sizeof(f->handle)); + // create file descriptor for new socket // don't inherit the file open mode bits int oflags = 0; diff --git a/test/libc/sock/socket_test.c b/test/libc/sock/socket_test.c index 74983072d..b3a5e1d32 100644 --- a/test/libc/sock/socket_test.c +++ b/test/libc/sock/socket_test.c @@ -152,8 +152,6 @@ __attribute__((__constructor__)) static void StdioPro(int argc, char *argv[]) { } TEST(socket, canBeUsedAsExecutedStdio) { - if (IsWindows()) - return; // TODO(jart): What broke this? char buf[16] = {0}; const char *prog; uint32_t addrsize = sizeof(struct sockaddr_in);