--- name: Socket runtime: pp source: src/native/Socket/pp.rs --- ```{index} single: Socket; Perl module (pp runtime) ``` # Socket 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 ## inet_aton Convert an IPv4 address string (dotted-quad or hostname) to a packed 4-byte binary address. Returns undef on failure. ```perl 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. ```perl use Socket 'inet_ntoa'; my $ip = inet_ntoa($packed); # "127.0.0.1" ``` ## 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). ```perl use Socket qw(inet_pton AF_INET6); my $packed = inet_pton(AF_INET6, "::1"); ``` ## inet_ntop Address-family-aware conversion of a packed binary address to a string. ```perl use Socket qw(inet_ntop AF_INET); my $ip = inet_ntop(AF_INET, $packed); ``` ## pack_sockaddr_in Pack a port number and a packed IPv4 address into a sockaddr_in structure. ```perl use Socket; my $sockaddr = pack_sockaddr_in(80, inet_aton("127.0.0.1")); ``` ## unpack_sockaddr_in Unpack a sockaddr_in structure into a port number and packed IPv4 address. ```perl use Socket; my ($port, $addr) = unpack_sockaddr_in($sockaddr); ``` ## pack_sockaddr_in6 Pack a port, packed IPv6 address, scope ID, and flow info into a sockaddr_in6 structure. ## unpack_sockaddr_in6 Unpack a sockaddr_in6 structure into port, address, scope ID, and flow info. ## pack_sockaddr_un Pack a Unix domain socket path into a sockaddr_un structure. ```perl use Socket 'pack_sockaddr_un'; my $sockaddr = pack_sockaddr_un("/tmp/my.sock"); ``` ## unpack_sockaddr_un Extract the pathname from a sockaddr_un structure. ## 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. ## 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. ```perl use Socket qw(getaddrinfo); my ($err, @res) = getaddrinfo("localhost", "http"); ``` ## getnameinfo Reverse-resolve a packed sockaddr to a hostname and service name. ```perl use Socket qw(getnameinfo); my ($err, $host, $service) = getnameinfo($sockaddr); ```