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.