Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets Erlang开放式套接字或已知_Sockets_Erlang - Fatal编程技术网

Sockets Erlang开放式套接字或已知

Sockets Erlang开放式套接字或已知,sockets,erlang,Sockets,Erlang,如何知道使用erlang时套接字是否打开?您所说的是哪种套接字?我的猜测是,如果套接字未打开,大多数套接字函数都会返回错误元组。你说的是什么类型的套接字?我的猜测是,如果套接字未打开,大多数套接字函数都会返回错误元组。使用。如果套接字关闭,则返回未定义的。例如: Eshell V5.8.3 (abort with ^G) 1> {ok,S} = gen_tcp:connect("localhost", 8000, [binary,{active,false}]). {ok,#Port} 2>

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

您所说的是哪种套接字?我的猜测是,如果套接字未打开,大多数套接字函数都会返回错误元组。

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

使用。如果套接字关闭,则返回未定义的
。例如:

Eshell V5.8.3 (abort with ^G) 1> {ok,S} = gen_tcp:connect("localhost", 8000, [binary,{active,false}]). {ok,#Port} 2> erlang:port_info(S). [{name,"tcp_inet"}, {links,[]}, {id,634}, {connected,}, {input,0}, {output,0}] 3> gen_tcp:close(S). ok 4> erlang:port_info(S). undefined Eshell V5.8.3(使用^G中止) 1> {ok,S}=gen_tcp:connect(“localhost”,8000,[binary,{active,false}])。 {好的,#端口} 2> erlang:端口信息。 [{name,“tcp_inet”}, {links,[]}, {id,634}, {已连接,}, {输入,0}, {输出,0}] 3> gen_tcp:关闭。 好啊 4> erlang:端口信息。 未定义 但是要小心使用它进行防御编程,因为这不是Erlang的方式。最好让你的代码假设套接字是打开的,如果它因为试图使用一个已经关闭的套接字而遇到错误,让它崩溃,让其他类似于主管的东西来处理错误。

使用。如果套接字关闭,则返回未定义的
。例如:

Eshell V5.8.3 (abort with ^G) 1> {ok,S} = gen_tcp:connect("localhost", 8000, [binary,{active,false}]). {ok,#Port} 2> erlang:port_info(S). [{name,"tcp_inet"}, {links,[]}, {id,634}, {connected,}, {input,0}, {output,0}] 3> gen_tcp:close(S). ok 4> erlang:port_info(S). undefined Eshell V5.8.3(使用^G中止) 1> {ok,S}=gen_tcp:connect(“localhost”,8000,[binary,{active,false}])。 {好的,#端口} 2> erlang:端口信息。 [{name,“tcp_inet”}, {links,[]}, {id,634}, {已连接,}, {输入,0}, {输出,0}] 3> gen_tcp:关闭。 好啊 4> erlang:端口信息。 未定义
但是要小心使用它进行防御编程,因为这不是Erlang的方式。最好让你的代码假设套接字是打开的,如果它因为试图使用一个已经关闭的套接字而出现错误,让它崩溃,让其他人(如主管)来处理错误。

当你的应用程序到达你想知道的点时,在你的终端中尝试这一点

inet:i() inet:i()
当你的应用程序达到你想知道的点时,在你的终端上试试这个

inet:i() inet:i()
您可能会发现有用的。您可能会发现有用的。这将打开一个客户端套接字,而不是服务器。@rvirding True,但我肯定没有领会你的意思——你可以用调用
gen\u tcp:listen
gen\u tcp:accept
来代替上面的
gen\u tcp:connect
调用,例如,在它们返回的套接字上调用
erlang:port\u info/1
,结果与connect示例所示相同。是的,当然会。我的评论只是指出,这段代码是如何打开客户端套接字的一个示例。对于服务器套接字,您需要使用
gen_tcp:listen
gen_tcp:accept
,正如您在评论中所说。这将打开一个客户端套接字,而不是服务器。@rvirding True,但我肯定没有领会你的意思——你可以用调用
gen\u tcp:listen
gen\u tcp:accept
来代替上面的
gen\u tcp:connect
调用,例如,在它们返回的套接字上调用
erlang:port\u info/1
,结果与connect示例所示相同。是的,当然会。我的评论只是指出,这段代码是如何打开客户端套接字的一个示例。对于服务器套接字,您需要使用
gen_tcp:listen
gen_tcp:accept
,正如您在评论中所说的那样。