class IO::Socket::Async::ListenSocket

A tap for listening TCP sockets

class IO::Socket::Async::ListenSocket is Tap {}

IO::Socket::Async::ListenSocket is returned by the tap|/type/Supply#method_tap method when called on the Supply returned by calling the listen method of IO::Socket::Async, which represents a listening TCP socket:

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 $hostInt: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|/type/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|/type/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.

Type Graph

Type relations for IO::Socket::Async::ListenSocket
perl6-type-graph IO::Socket::Async::ListenSocket IO::Socket::Async::ListenSocket Tap Tap IO::Socket::Async::ListenSocket->Tap Mu Mu Any Any Any->Mu Tap->Any

Expand above chart

Routines supplied by class Tap

IO::Socket::Async::ListenSocket inherits from class Tap, which provides the following routines:

(Tap) method close

method close(Tap:D:)

Closes the tap.