threadsafe accept on windows, linux

* Windows has WSAAccept() which will create sockets inheriting flags from
  the server socket

* Linux has accept4() which has a flags argument supporting SOCK_CLOEXEC
This commit is contained in:
Karen Dombroski 2024-05-01 21:43:38 +12:00
parent 50fce538c6
commit fb739dbaec

View file

@ -6484,7 +6484,15 @@ inline bool Server::listen_internal() {
#ifndef _WIN32
}
#endif
#if defined _WIN32
// sockets conneced via WASAccept inherit flags NO_HANDLE_INHERIT, OVERLAPPED
socket_t sock = WSAAccept(svr_sock_, nullptr, nullptr, nullptr, 0);
#elif defined __linux__
socket_t sock = accept4(svr_sock_, nullptr, nullptr, SOCK_CLOEXEC);
#else
socket_t sock = accept(svr_sock_, nullptr, nullptr);
#endif
if (sock == INVALID_SOCKET) {
if (errno == EMFILE) {