use v6; port_check( ['perlmonks.com', 'fail.com', 'fail.com', 'fail.com', 'fail.com', 'fail.com', 'fail.com', 'fail.com', 'perlmonks.org'], 55, 2 ); sub port_check( @nodes, $port = 22, $timeout = 10) { my @promises = @nodes.map( -> $host { IO::Socket::Async.connect( $host, $port ); }); my @waits = @promises.map( -> $promise { Promise.anyof( Promise.in( $timeout ), $promise ) }); await Promise.allof( @waits ); for @nodes Z @promises -> [$node, $promise] { if $promise.status ~~ Kept { given $promise.result { my $peer = "{.peer-host}:{.peer-port}"; my $socket = "{.socket-host}:{.socket-port}"; say "$socket connected to $peer"; .close; } } else { say "not connected to $node:$port"; } } }