From 017565203f40860d24b80a54136a160aee460dbe Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Mon, 16 Jul 2018 18:21:48 +0200 Subject: [socket-nif] Add support for multiple acceptor processes Its now possible to have multiple (simultaneous) acceptor processes for the same listening socket. OTP-14831 --- erts/preloaded/ebin/socket.beam | Bin 46328 -> 46540 bytes erts/preloaded/src/socket.erl | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'erts/preloaded') diff --git a/erts/preloaded/ebin/socket.beam b/erts/preloaded/ebin/socket.beam index 9baf6a422e..c24dc40e10 100644 Binary files a/erts/preloaded/ebin/socket.beam and b/erts/preloaded/ebin/socket.beam differ diff --git a/erts/preloaded/src/socket.erl b/erts/preloaded/src/socket.erl index fbfd1903a1..96dc89bd9e 100644 --- a/erts/preloaded/src/socket.erl +++ b/erts/preloaded/src/socket.erl @@ -984,6 +984,7 @@ do_accept(LSockRef, SI, Timeout) -> Socket = #socket{info = SocketInfo, ref = SockRef}, {ok, Socket}; + {error, eagain} -> NewTimeout = next_timeout(TS, Timeout), receive @@ -997,7 +998,11 @@ do_accept(LSockRef, SI, Timeout) -> nif_cancel(LSockRef, accept, AccRef), flush_select_msgs(LSockRef, AccRef), {error, timeout} - end + end; + + {error, _} = ERROR -> + nif_cancel(LSockRef, accept, AccRef), % Just to be on the safe side... + ERROR end. -- cgit v1.2.3