TCP服务器没有响应
我使用gen_TCP OTP模块以Elixir编写了以下TCP服务器:TCP服务器没有响应,tcp,otp,elixir,gen-tcp,Tcp,Otp,Elixir,Gen Tcp,我使用gen_TCP OTP模块以Elixir编写了以下TCP服务器: defmodule Test do def server() do {:ok, listen_sock} = :gen_tcp.listen(43594, [{:active, true}, :binary]) {:ok, accept_sock} = :gen_tcp.accept(listen_sock) spawn(fn() -> poll(accept_sock) end) en
defmodule Test do
def server() do
{:ok, listen_sock} = :gen_tcp.listen(43594, [{:active, true}, :binary])
{:ok, accept_sock} = :gen_tcp.accept(listen_sock)
spawn(fn() -> poll(accept_sock) end)
end
defp poll(sock) do
case :gen_tcp.recv(sock, 0, 20) do
{:ok, data} ->
IO.puts "#{data}"
poll(sock)
{:error, :closed} -> :ok
end
end
end
Test.server
只要我使用telnet连接到服务器,它就会断开连接。知道发生了什么吗?我认为这是因为调用spawn()后server()返回,并且应用程序正常退出。我想这样写:
defmodule Test do
def server() do
{:ok, listen_sock} = :gen_tcp.listen(43594, [{:active, true}, :binary])
{:ok, accept_sock} = :gen_tcp.accept(listen_sock)
poll(accept_sock)
end
defp poll(sock) do
case :gen_tcp.recv(sock, 0, 20) do
{:ok, data} ->
IO.puts "#{data}"
poll(sock)
{:error, :closed} -> :ok
end
end
end
Test.server
我还没有测试上述代码,但这应该可以解决您的问题。是的,这可能就是问题所在。另一个选项是通过
--no-halt
选项:elixir--no-halt test\u server.exs
当使用:gen\u tcp.listen打开侦听套接字的进程终止时,该套接字以及通过列表套接字打开的所有套接字终止。