aboutsummaryrefslogtreecommitdiffstats
path: root/erts/preloaded
diff options
context:
space:
mode:
authorMicael Karlberg <[email protected]>2018-07-16 18:21:48 +0200
committerMicael Karlberg <[email protected]>2018-09-18 14:50:18 +0200
commit017565203f40860d24b80a54136a160aee460dbe (patch)
tree7dd8d8a9426cd918a1d41db7dcd99bcb7cc35a51 /erts/preloaded
parent8de18e84deaed4c9e6e7242ae2550fc6618dc44d (diff)
downloadotp-017565203f40860d24b80a54136a160aee460dbe.tar.gz
otp-017565203f40860d24b80a54136a160aee460dbe.tar.bz2
otp-017565203f40860d24b80a54136a160aee460dbe.zip
[socket-nif] Add support for multiple acceptor processes
Its now possible to have multiple (simultaneous) acceptor processes for the same listening socket. OTP-14831
Diffstat (limited to 'erts/preloaded')
-rw-r--r--erts/preloaded/ebin/socket.beambin46328 -> 46540 bytes
-rw-r--r--erts/preloaded/src/socket.erl7
2 files changed, 6 insertions, 1 deletions
diff --git a/erts/preloaded/ebin/socket.beam b/erts/preloaded/ebin/socket.beam
index 9baf6a422e..c24dc40e10 100644
--- a/erts/preloaded/ebin/socket.beam
+++ b/erts/preloaded/ebin/socket.beam
Binary files 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.