【发布时间】:2011-05-04 08:27:07
【问题描述】:
我有用 erlang 和命令处理程序编写的 tcp 服务器。如果客户端连接到我的服务器,然后关闭我如何捕获网络断开连接?
【问题讨论】:
-
请提供更多细节,也许还有一些代码。
标签: sockets erlang client disconnect
我有用 erlang 和命令处理程序编写的 tcp 服务器。如果客户端连接到我的服务器,然后关闭我如何捕获网络断开连接?
【问题讨论】:
标签: sockets erlang client disconnect
我想你正在使用 vanilla gen_tcp 来实现你的服务器。 在这种情况下,当客户端关闭套接字时,acceptor 进程(将 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()]), 好的 结尾。【讨论】:
您是否使用单独的链接进程来处理来自每个客户端的命令? 如果是这样,您可以考虑在主进程中捕获出口...
【讨论】: