Обнаружение порта, к которому привязан асинхронный сокет? - PullRequest
0 голосов
/ 03 марта 2019

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

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

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

1 Ответ

0 голосов
/ 04 марта 2019

Когда вы 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;
...