Я заставил tcp-сервера вызывать процесс для прослушивания входящих соединений. Вот пример кода (некоторые вещи удалены из моего исходного кода):
модуль а:
main([]) ->
{ ok, Pid } = b:start(),
receive
_ ->
ok
end.
модуль b:
-define(TCP_OPTIONS, [binary, { active, false}, { packet, 0 } , {reuseaddr, true}]).
...
start_link(Port) ->
Pid = spawn_link(server_listener, init, [ Port ]),
{ ok , self() }.
init(Port, Processor) ->
case gen_tcp:listen(Port, ?TCP_OPTIONS) of
{ ok , LSocket } ->
accept_loop(LSocket);
{ error, Reason } ->
{ stop, Reason }
end.
accept_loop( LSocket) ->
?LOG("Current socket acceptor PID [~w]~n", [self()]),
case gen_tcp:accept(LSocket) of
{ ok, Socket } ->
%do stuff here
spawn(server_listener , accept_loop, [ LSocket ]);
{ error, Reason } ->
?LOG("Error accepting socket! [ ~s ]~n", [ Reason ])
end.
Проблема в том, что КАЖДЫЙ раз, когда я пытаюсь подключиться через telnet к этому порту, я получаю сообщение об ошибке {error, closed} в gen_tcp: accept. Это уже сводит меня с ума, пытаясь понять, что происходит.
Спасибо