【问题标题】:Erlang open socket or knowErlang开socket还是知道的
【发布时间】:2011-08-08 14:37:39
【问题描述】:

如何用 erlang 知道套接字是否打开?

【问题讨论】:

标签: sockets erlang


【解决方案1】:

使用erlang:port_info/1。如果套接字关闭,它返回undefined。例如:

Eshell V5.8.3(使用 ^G 中止)
1> {ok,S} = gen_tcp:connect("localhost", 8000, [binary,{active,false}])。
{好的,#端口}
2> 二郎:端口信息(S)。
[{name,"tcp_inet"},
 {链接,[]},
 {id,634},
 {连接的,},
 {输入,0},
 {输出,0}]
3> gen_tcp:关闭(S)。
好的
4> 二郎:端口信息(S)。
未定义

但是在防御性编程中使用它时要小心,因为这不是 Erlang 的方式。最好让你的代码假设套接字是打开的,如果它因为尝试使用已经关闭的套接字而遇到错误,让它崩溃并让其他东西(比如主管)处理错误。

【讨论】:

  • 这会打开一个客户端套接字,而不是服务器。
  • @rvirding 是的,但我一定错过了您的观点——您可以将上面的 gen_tcp:connect 调用替换为对 gen_tcp:listengen_tcp:accept 的调用,然后在它们返回的套接字与连接示例显示的结果相同。
  • 是的,当然会。我的评论只是指出这段代码是您如何打开客户端套接字的示例。对于服务器套接字,您需要使用 gen_tcp:listengen_tcp:accept,正如您在评论中所说的那样。
【解决方案2】:

当您的应用到达您想知道的点时,在您的终端中尝试此操作

网络:我()

【讨论】:

    【解决方案3】:

    你在说什么类型的套接字?我的猜测是,如果套接字未打开,大多数套接字函数都会返回一个错误元组。

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多