Просмотр исходного кода

Fix premature ranch_server:set_addr

With num_listen_sockets>1 and SO_REUSEPORT disabled, the startup of
ranch_acceptors_sup fails because extra sockets cannot be created.
Because ranch_server:set_addr is called right after the creation
of the first socket succeeded, ranch:get_port etc may still return
an ok tuple until it notices that the listener is in fact down.
juhlig 6 лет назад
Родитель
Сommit
a4af58b2e6
1 измененных файлов с 1 добавлено и 1 удалено
  1. 1 1
      src/ranch_acceptors_sup.erl

+ 1 - 1
src/ranch_acceptors_sup.erl

@@ -51,7 +51,6 @@ init([Ref, NumAcceptors, Transport]) ->
 start_listen_sockets(Ref, NumListenSockets, Transport, SocketOpts0, Logger) when NumListenSockets > 0 ->
 	BaseSocket = start_listen_socket(Ref, Transport, SocketOpts0, Logger),
 	{ok, Addr={_, Port}} = Transport:sockname(BaseSocket),
-	ranch_server:set_addr(Ref, Addr),
 	SocketOpts = case lists:keyfind(port, 1, SocketOpts0) of
 		{port, Port} ->
 			SocketOpts0;
@@ -61,6 +60,7 @@ start_listen_sockets(Ref, NumListenSockets, Transport, SocketOpts0, Logger) when
 	ExtraSockets = [
 		{N, start_listen_socket(Ref, Transport, SocketOpts, Logger)}
 	|| N <- lists:seq(2, NumListenSockets)],
+	ranch_server:set_addr(Ref, Addr),
 	[{1, BaseSocket}|ExtraSockets].
 
 -spec start_listen_socket(any(), module(), list(), module()) -> inet:socket().