Как узнать порт, к которому привязан асинхронный сокет?

Начиная с версии 6.d Perl 6, вы можете использовать порт 0, чтобы попросить интерпретатор найти порт для привязки за вас:

my $socket = IO::Socket::Async.listen($SOCKET_ADDR, 0);

Однако $ socket - это Supply без информации об используемом им низкоуровневом сокете. Как узнать, к какому порту он привязан?


person jjmerelo    schedule 03.03.2019    source источник
comment
Вы имеете ввиду версию 6.d?   -  person Christopher Bottoms    schedule 05.03.2019


Ответы (1)


Когда вы tap переменную $socket, вы получаете обратно объект (недокументированный) IO::Socket::Async::ListenSocket. У этого есть несколько методов socket-port и socket-host, которые Promises, а затем, когда они разрешаются, имеют правильные значения.

Вероятно, мы можем привести в порядок документы, чтобы указать на это.

Пример :

my $s = IO::Socket::Async.listen("127.0.0.1",0);
my $t = $s.tap;
my $p = await $t.socket-port;
$p.say;
person Scimon Proctor    schedule 04.03.2019