如何设置套接字的接收超时时间,我在套接字选项手册中找不到它。
解决这个问题的第一个方法是将after语句放置在后面。
解决这个问题的第一个方法是将after语句放置在后面。
{ok, Listen} = gen_tcp:listen(Port, [..,{active, once}...]),
{ok, Socket} = gen_tcp:accept(Listen),
loop(Socket).
loop(Socket) ->
receive
{tcp, Socket, Data} ->
inet:setopts(Sock, [{active, once}]),
loop(Socket);
{tcp_closed, Socket} -> closed;
Other -> process_data(Other)
after 1000 -> time_out
end.
但是套接字可能永远不会超时,因为其他进程有消息。如何设置超时时间而不产生其他进程?
prim_inet
:“它是一个内部模块,不应该从应用程序中调用,因此未记录文档。即使在最小的补丁中,其接口也可能会发生意外更改。” 参见此答案。 - Ludovic Kuty