0

我有用 erlang 和命令处理程序编写的 tcp 服务器。如果客户端连接到我的服务器,然后关闭我如何捕获网络断开连接?

4

2 回答 2

8

我想你正在使用 vanilla gen_tcp 来实现你的服务器。在这种情况下,当从客户端关闭套接字时,接受者进程(将 Socket 传递给的进程)将收到 {tcp_closed, Socket} 消息。

erlang gen_tcp文档中的示例代码。

开始(LPort)->
    case gen_tcp:listen(LPort,[{active, false},{packet,2}]) 的
        {好的,ListenSock} ->
            产卵(乐趣()->服务器(LS)结束);
        {错误,原因} ->
            {错误,原因}
    结尾。

服务器(LS)->
    case gen_tcp:accept(LS) of
        {好的,S} ->
            循环(S),
            服务器(LS);
        其他 ->
            io:format("接受返回~w - 再见!~n",[Other]),
            行
    结尾。

循环(S)->
    inet:setopts(S,[{active,once}]),
    收到
        {tcp,S,数据} ->
            答案 = do_something_with(Data),
            gen_tcp:send(S,Answer),
            循环(S);
        {tcp_closed,S} ->
            io:format("Socket ~w 关闭 [~w]~n",[S,self()]),
            行
    结尾。
于 2011-05-04T10:01:47.560 回答
0

您是否使用单独的链接进程来处理来自每个客户端的命令?如果是这样,您可以考虑在主进程中捕获退出...

于 2011-05-04T09:01:42.860 回答