From 4c6b882562eb5fe2cacf9b806d759c2f2e2b3c2f Mon Sep 17 00:00:00 2001 From: Adit Makwana Date: Thu, 16 Feb 2023 10:17:17 +0100 Subject: [PATCH] bsd_close_socket() now preserves errno/GetLastError() --- src/bsd.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/bsd.c b/src/bsd.c index d35eae98..363f067b 100644 --- a/src/bsd.c +++ b/src/bsd.c @@ -310,10 +310,17 @@ LIBUS_SOCKET_DESCRIPTOR bsd_create_socket(int domain, int type, int protocol) { } void bsd_close_socket(LIBUS_SOCKET_DESCRIPTOR fd) { + // errno is rewritten by close(fd), and the actual error number is lost. #ifdef _WIN32 + DWORD error; + error = GetLastError(); closesocket(fd); + SetLastError(error); #else + int error; + error = errno; close(fd); + errno = error; #endif }