.NET TCP Sender를 Erlang 수신기에 전송했습니다. localhost
을 해결할 때 .NET 구성 요소는 IPv6 주소 ::1
을 사용하는 것을 좋아합니다. Erlang이 gen_tcp를 사용하여 IPv6 주소를 수신하는 방법을 잘 모르겠습니다. 여기 내 시도가있다. 듣기에 잘못된 소켓을 말하고 있습니까? 감사!Erlang gen_tcp : IPv6에 대해/2를 청취합니다.
listen(Config) ->
PortString = Config#cfg.eventbusport,
GoodPort = check_int(PortString),
Port = if GoodPort ->
list_to_integer(PortString);
true ->
?DEFAULT_PORT
end, %% IPv6 here --->
{ok, XSocket} = gen_tcp:listen(Port, [binary, {packet, line}, {active, false}, {reuseaddr, true}, inet6, {ip, {0,0,0,0,0,0,0,1}}])
end,
accept(XSocket, Config).
accept(LSocket, Config) ->
case gen_tcp:accept(LSocket) of
{ok, Socket} ->
spawn_link(fun() -> loop(Socket, Config) end),
accept(LSocket, Config);
{error, closed} ->
logger("Accept: Closed socket.",[],1),
listen(Config)
end.
loop(Socket, Config) ->
case inet:setopts(Socket, [{recbuf, 64000}]) of
ok ->
case gen_tcp:recv(Socket, 0) of
{ok, Data} ->
SplitData = binary:split(Data,?CRLF,[global]),
discrim(SplitData, Config),
loop(Socket, Config);
{error, closed} ->
logger("Loop: Closed socket.",[],1),
ok
end;
{error, Reason} ->
logger("ERROR: Couldn't set the recbuf to 64k! Because ~p",[Reason],1)
end.
정확히 여기에 어떤 문제가 있습니까? 오류 메시지가 표시되거나 시간 초과 또는 어떤 오류가 발생합니까? – dijxtra
* 업데이트 * : 내가 겪고있는 문제는 결코 연결되지 않는다는 것입니다. 내 C# 보낸 사람이 연결할 수 없으므로 데이터를 보내지 않습니다. 소켓 1971에 대한 Address :: 1 수신 대기중인 것은 아무것도 없다고 말합니다. – batman