【问题标题】:Erlang catch disconnect clientErlang catch 断开客户端
【发布时间】:2011-05-04 08:27:07
【问题描述】:

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

【问题讨论】:

  • 请提供更多细节,也许还有一些代码。

标签: sockets erlang client disconnect


【解决方案1】:

我想你正在使用 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()]), 好的 结尾。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 2012-01-07
      • 2013-02-17
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多