6464-define (SETUPTIME , 7000 ).
6565-define (NET_TICK_INTENSITY , 4 ).
6666-define (NET_TICK_TIME , 60 ).
67+ % Define distribution port range
68+ -define (DIST_PORT_MIN , 5001 ).
69+ -define (DIST_PORT_MAX , 5003 ).
6770
6871% %-----------------------------------------------------------------------------
6972% % @doc Start erlang distribution
@@ -179,7 +182,9 @@ init(Options) ->
179182 TickInterval = (? NET_TICK_TIME * 1000 ) div ? NET_TICK_INTENSITY ,
180183 Self = self (),
181184 Ticker = spawn_link (fun () -> ticker (Self , TickInterval ) end ),
182- case ProtoDist :listen (Name ) of
185+ % - case ProtoDist:listen(Name) of
186+ % Try ports in range until one succeeds
187+ case try_listen_ports (ProtoDist , Name ) of
183188 {ok , {Listen , _Address , Creation }} ->
184189 true = erlang :setnode (Node , Creation ),
185190 AcceptPid = ProtoDist :accept (Listen ),
@@ -198,6 +203,18 @@ init(Options) ->
198203 {stop , Reason }
199204 end .
200205
206+ % Add new function to try ports in range
207+ try_listen_ports (ProtoDist , Name ) ->
208+ try_listen_ports (ProtoDist , Name , ? DIST_PORT_MIN ).
209+
210+ try_listen_ports (_ProtoDist , _Name , Port ) when Port > ? DIST_PORT_MAX ->
211+ {error , no_port_available };
212+ try_listen_ports (ProtoDist , Name , Port ) ->
213+ case ProtoDist :listen (Name , Port ) of
214+ {ok , _ } = Success -> Success ;
215+ {error , _ } -> try_listen_ports (ProtoDist , Name , Port + 1 )
216+ end .
217+
201218% % @hidden
202219handle_call (get_state , _From , # state {longnames = Longnames } = State ) ->
203220 NameDomain =
0 commit comments