class IO::Socket::INET
class IO::Socket::INET does IO::Socket {}
IO::Socket::INET
provides TCP sockets, both the server and the client side.
For UDP support, please see IO::Socket::Async.
Here is an example of a very simplistic "echo" server that listens on
localhost
, port 3333
:
my $listen = IO::Socket::INET.new( :listen,
:localhost<localhost>,
:localport(3333) );
loop {
my $conn = $listen.accept;
try {
while my $buf = $conn.recv(:bin) {
$conn.write: $buf;
}
}
$conn.close;
CATCH {
default { .payload.say; }
}
}
And a client that connects to it, and prints out what the server answers:
my $conn = IO::Socket::INET.new( :host<localhost>,
:port(3333) );
$conn.print: 'Hello, Raku';
say $conn.recv;
$conn.close;
Please bear in mind that this is a synchronous connection; an attempt by any of the nodes to write without the other reading will produce the error Could not receive data from socket: Connection reset by peer
.
Methods
method new
multi method new(
:$host,
:$port,
:$family = PF_INET,
:$encoding = 'utf-8',
:$nl-in = "\r\n",
--> IO::Socket::INET:D)
multi method new(
:$localhost,
:$localport,
:$family = PF_INET,
:$listen,
:$encoding = 'utf-8',
:$nl-in = "\r\n",
--> IO::Socket::INET:D)
Creates a new socket.
If :$listen
is True, creates a new socket that listen on :$localhost
(which can be an IP address or a domain name) on port :$localport
; in other words
the :$listen
flag determines the server mode of the socket.
Otherwise (i.e., :$listen
is False
), the new socket opens immediately
a connection to :$host
on port :$port
.
:$family
defaults to PF_INET
constant for IPv4, and can be set
to PF_INET6
constant for IPv6.
For text operations (such as method lines and method get),
:$encoding
specifies the encoding, and :$nl-in
determines
the character(s) that separate lines.
Methods
method get
method get()
Reads a line from the socket and returns it as of type Str. Return Nil on end-of-file (EOF).
method lines
method lines()
Returns a lazy list of lines read from the socket.
method accept
method accept()
In listen/server mode, waits for a new incoming connection.
Once a new connection is established, an IO::Socket::INET
instance (or a subclass instance) for consuming
the connection is returned.