diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index 7a6dbdc41..185fd51ff 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -496,7 +496,7 @@ fhandler_socket::af_local_set_secret (char *buf) /* Maximum number of concurrently opened sockets from all Cygwin processes per session. Note that shared sockets (through dup/fork/exec) are counted as one socket. */ -#define NUM_SOCKS (32768 / sizeof (wsa_event)) +#define NUM_SOCKS 2048U #define LOCK_EVENTS \ if (wsock_mtx && \ @@ -623,7 +623,14 @@ fhandler_socket::init_events () NtClose (wsock_mtx); return false; } - wsock_events = search_wsa_event_slot (new_serial_number); + if (!(wsock_events = search_wsa_event_slot (new_serial_number))); + { + set_errno (ENOBUFS); + NtClose (wsock_evt); + NtClose (wsock_mtx); + return false; + } + /* sock type not yet set here. */ if (pc.dev == FH_UDP || pc.dev == FH_DGRAM) wsock_events->events = FD_WRITE;