class IO::Socket::Async::ListenSocket
class IO::Socket::Async::ListenSocket is Tap {}
IO::Socket::Async::ListenSocket represents a listening TCP socket.
Instances of this are returned by the tap
method of the supply returned by
IO::Socket::Async.listen:
my IO::Socket::Async::ListenSocket:D $server =
IO::Socket::Async.listen('127.0.0.1', 0).tap(-> $peer {
await $peer.print: "Hello. Goodbye!\r\n";
$peer.close;
});
my (Str:D $host, Int:D $port) = await $server.socket-host, $server.socket-port;
say "The rude service is listening on $host:$port for the next 10 seconds...";
await Promise.in(10).then({ $server.close });
say "I'm done now.";
Alternatively, by using the do prefix with whenever, you can also
use it from within a react block:
react {
my IO::Socket::Async::ListenSocket:D $server =
do whenever IO::Socket::Async.listen('127.0.0.1', 0) -> IO::Socket::Async:D $connection {
await $connection.print: "Hello. Goodbye!\r\n";
$connection.close;
QUIT { $server.close; .rethrow }
};
# Use $server here somehow.
}
Methods
method socket-host
method socket-host(--> Promise)
Returns a Promise that will be kept with a Str containing the address of the listening socket.
method socket-port
method socket-port(--> Promise)
Returns a Promise that will be kept with an Int containing the port of the listening socket.
method native-descriptor
method native-descriptor(--> Int)
Returns the corresponding file descriptor (SOCKET on Windows) for the
listening socket.