Эрланг открыть сокет или знать - PullRequest
1 голос
/ 19 апреля 2011

Как узнать, открыт ли сокет или нет с помощью erlang?

Ответы [ 3 ]

10 голосов
/ 19 апреля 2011

Использовать erlang: port_info / 1 .Возвращает undefined, если сокет закрыт.Например:

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

Но будьте осторожны при использовании этого для защитного программирования, так как это не так, как Эрланг.Лучше заставить ваш код предполагать, что сокет открыт, и если он обнаруживает ошибку, потому что пытается использовать уже закрытый сокет, пусть происходит сбой и пусть что-то другое, например супервизор, обрабатывает ошибку.

3 голосов
/ 26 апреля 2011

попробуйте это в своем терминале, когда ваше приложение достигнет точки, в которой вы хотите знать


inet:i()

0 голосов
/ 19 апреля 2011

О каких розетках ты говоришь? Я предполагаю, что большинство функций сокетов будет возвращать кортеж ошибки, если сокет не открыт.

...