eaddrinuse

Dietmar Schaefer <>
Thu Apr 28 06:42:48 CEST 2005


Hi !


If I understand it right
 
 {reuseaddr, Boolean} as parameter for  gen_tcp:listen  allows local 
reuse of port numbers.


So the error eaddrinuse should not occur ?


Every time I try to reconnect to the server I get this error.


Here is my code:

 getMessages(Port) when integer(Port) ->
    ListenPid = spawn_link(fun() -> listenServer(Port) end).

getMessages() ->
    io:format("getMessages ~n"),
    getMessages(?LISTENPORT).


listenServer(Port) ->
    Opts = [{packet, raw}, {active, false},{reuseaddr, true}],
    case gen_tcp:listen(Port,Opts) of
        {ok,ListenSocket}  -> listenLoop(ListenSocket);
        {error,eaddrinuse} -> io:format("error eaddrinuse in 
listenServer ~n"),                             
        ok
    end.

listenLoop(ListenSocket) ->
    {ok,Sock} = gen_tcp:accept(ListenSocket),
    spawn_link(fun() -> listenHandler(Sock) end),   
    listenLoop(ListenSocket).


listenHandler(Sock) ->
    do_recv(Sock),
    io:format("do_recv terminated~n"),
    io:format("calling getMessages again ~n"),
    gen_tcp:close(Sock),
    getMessages().
   


Any hints


Regards


Dietmar



More information about the erlang-questions mailing list