Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Socket

Native Rust implementation built into the interpreter. Runtime: PP. See original documentation for the full Perl reference.

Native implementation of Perl’s Socket module

Provides socket-related constants and functions compatible with Perl’s Socket module. Since PetaPerl does not support XS, this module is implemented directly in Rust.

Synopsis

use Socket qw(inet_aton inet_ntoa pack_sockaddr_in
              unpack_sockaddr_in getaddrinfo);
my $packed = inet_aton("127.0.0.1");
my $ip     = inet_ntoa($packed);
my $sockaddr = pack_sockaddr_in(80, inet_aton("127.0.0.1"));
my ($port, $addr) = unpack_sockaddr_in($sockaddr);
# Name resolution
my ($err, @res) = getaddrinfo("localhost", "http");

Constants

Address families (AF_INET, AF_INET6, AF_UNIX, etc.), socket types (SOCK_STREAM, SOCK_DGRAM, etc.), protocol constants, and more.

Functions

getaddrinfo

Resolve a hostname and service name to a list of socket address structures. Returns a list of hashrefs with keys: family, socktype, protocol, addr, canonname.

use Socket qw(getaddrinfo);
my ($err, @res) = getaddrinfo("localhost", "http");

getnameinfo

Reverse-resolve a packed sockaddr to a hostname and service name.

use Socket qw(getnameinfo);
my ($err, $host, $service) = getnameinfo($sockaddr);

inet_aton

Convert an IPv4 address string (dotted-quad or hostname) to a packed 4-byte binary address. Returns undef on failure.

use Socket 'inet_aton';
my $packed = inet_aton("127.0.0.1");

inet_ntoa

Convert a packed 4-byte binary IPv4 address to a dotted-quad string.

use Socket 'inet_ntoa';
my $ip = inet_ntoa($packed);  # "127.0.0.1"

inet_ntop

Address-family-aware conversion of a packed binary address to a string.

use Socket qw(inet_ntop AF_INET);
my $ip = inet_ntop(AF_INET, $packed);

inet_pton

Address-family-aware conversion of an IP address string to packed binary form. Supports AF_INET (4 bytes) and AF_INET6 (16 bytes).

use Socket qw(inet_pton AF_INET6);
my $packed = inet_pton(AF_INET6, "::1");

pack_sockaddr_in

Pack a port number and a packed IPv4 address into a sockaddr_in structure.

use Socket;
my $sockaddr = pack_sockaddr_in(80, inet_aton("127.0.0.1"));

pack_sockaddr_in6

Pack a port, packed IPv6 address, scope ID, and flow info into a sockaddr_in6 structure.

pack_sockaddr_un

Pack a Unix domain socket path into a sockaddr_un structure.

use Socket 'pack_sockaddr_un';
my $sockaddr = pack_sockaddr_un("/tmp/my.sock");

sockaddr_family

Extract the address family (AF_INET, AF_INET6, AF_UNIX) from a packed sockaddr.

sockaddr_in

Context-dependent: in list context, equivalent to unpack_sockaddr_in; with two arguments, equivalent to pack_sockaddr_in.

sockaddr_in6

IPv6 equivalent of sockaddr_in.

unpack_sockaddr_in

Unpack a sockaddr_in structure into a port number and packed IPv4 address.

use Socket;
my ($port, $addr) = unpack_sockaddr_in($sockaddr);

unpack_sockaddr_in6

Unpack a sockaddr_in6 structure into port, address, scope ID, and flow info.

unpack_sockaddr_un

Extract the pathname from a sockaddr_un structure.