summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man3pm/Socket.3pm
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/mageia-cauldron/man3pm/Socket.3pm')
-rw-r--r--upstream/mageia-cauldron/man3pm/Socket.3pm674
1 files changed, 674 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/Socket.3pm b/upstream/mageia-cauldron/man3pm/Socket.3pm
new file mode 100644
index 00000000..190da75d
--- /dev/null
+++ b/upstream/mageia-cauldron/man3pm/Socket.3pm
@@ -0,0 +1,674 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "Socket 3pm"
+.TH Socket 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+"Socket" \- networking constants and support functions
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+\&\f(CW\*(C`Socket\*(C'\fR a low-level module used by, among other things, the IO::Socket
+family of modules. The following examples demonstrate some low-level uses but
+a practical program would likely use the higher-level API provided by
+\&\f(CW\*(C`IO::Socket\*(C'\fR or similar instead.
+.PP
+.Vb 1
+\& use Socket qw(PF_INET SOCK_STREAM pack_sockaddr_in inet_aton);
+\&
+\& socket(my $socket, PF_INET, SOCK_STREAM, 0)
+\& or die "socket: $!";
+\&
+\& my $port = getservbyname "echo", "tcp";
+\& connect($socket, pack_sockaddr_in($port, inet_aton("localhost")))
+\& or die "connect: $!";
+\&
+\& print $socket "Hello, world!\en";
+\& print <$socket>;
+.Ve
+.PP
+See also the "EXAMPLES" section.
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This module provides a variety of constants, structure manipulators and other
+functions related to socket-based networking. The values and functions
+provided are useful when used in conjunction with Perl core functions such as
+\&\fBsocket()\fR, \fBsetsockopt()\fR and \fBbind()\fR. It also provides several other support
+functions, mostly for dealing with conversions of network addresses between
+human-readable and native binary forms, and for hostname resolver operations.
+.PP
+Some constants and functions are exported by default by this module; but for
+backward-compatibility any recently-added symbols are not exported by default
+and must be requested explicitly. When an import list is provided to the
+\&\f(CW\*(C`use Socket\*(C'\fR line, the default exports are not automatically imported. It is
+therefore best practice to always to explicitly list all the symbols required.
+.PP
+Also, some common socket "newline" constants are provided: the constants
+\&\f(CW\*(C`CR\*(C'\fR, \f(CW\*(C`LF\*(C'\fR, and \f(CW\*(C`CRLF\*(C'\fR, as well as \f(CW$CR\fR, \f(CW$LF\fR, and \f(CW$CRLF\fR, which map
+to \f(CW\*(C`\e015\*(C'\fR, \f(CW\*(C`\e012\*(C'\fR, and \f(CW\*(C`\e015\e012\*(C'\fR. If you do not want to use the literal
+characters in your programs, then use the constants provided here. They are
+not exported by default, but can be imported individually, and with the
+\&\f(CW\*(C`:crlf\*(C'\fR export tag:
+.PP
+.Vb 1
+\& use Socket qw(:DEFAULT :crlf);
+\&
+\& $sock\->print("GET / HTTP/1.0$CRLF");
+.Ve
+.PP
+The entire \fBgetaddrinfo()\fR subsystem can be exported using the tag \f(CW\*(C`:addrinfo\*(C'\fR;
+this exports the \fBgetaddrinfo()\fR and \fBgetnameinfo()\fR functions, and all the
+\&\f(CW\*(C`AI_*\*(C'\fR, \f(CW\*(C`NI_*\*(C'\fR, \f(CW\*(C`NIx_*\*(C'\fR and \f(CW\*(C`EAI_*\*(C'\fR constants.
+.SH CONSTANTS
+.IX Header "CONSTANTS"
+In each of the following groups, there may be many more constants provided
+than just the ones given as examples in the section heading. If the heading
+ends \f(CW\*(C`...\*(C'\fR then this means there are likely more; the exact constants
+provided will depend on the OS and headers found at compile-time.
+.SS "PF_INET, PF_INET6, PF_UNIX, ..."
+.IX Subsection "PF_INET, PF_INET6, PF_UNIX, ..."
+Protocol family constants to use as the first argument to \fBsocket()\fR or the
+value of the \f(CW\*(C`SO_DOMAIN\*(C'\fR or \f(CW\*(C`SO_FAMILY\*(C'\fR socket option.
+.SS "AF_INET, AF_INET6, AF_UNIX, ..."
+.IX Subsection "AF_INET, AF_INET6, AF_UNIX, ..."
+Address family constants used by the socket address structures, to pass to
+such functions as \fBinet_pton()\fR or \fBgetaddrinfo()\fR, or are returned by such
+functions as \fBsockaddr_family()\fR.
+.SS "SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, ..."
+.IX Subsection "SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, ..."
+Socket type constants to use as the second argument to \fBsocket()\fR, or the value
+of the \f(CW\*(C`SO_TYPE\*(C'\fR socket option.
+.SS "SOCK_NONBLOCK. SOCK_CLOEXEC"
+.IX Subsection "SOCK_NONBLOCK. SOCK_CLOEXEC"
+Linux-specific shortcuts to specify the \f(CW\*(C`O_NONBLOCK\*(C'\fR and \f(CW\*(C`FD_CLOEXEC\*(C'\fR flags
+during a \f(CWsocket(2)\fR call.
+.PP
+.Vb 1
+\& socket( my $sockh, PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0 )
+.Ve
+.SS SOL_SOCKET
+.IX Subsection "SOL_SOCKET"
+Socket option level constant for \fBsetsockopt()\fR and \fBgetsockopt()\fR.
+.SS "SO_ACCEPTCONN, SO_BROADCAST, SO_ERROR, ..."
+.IX Subsection "SO_ACCEPTCONN, SO_BROADCAST, SO_ERROR, ..."
+Socket option name constants for \fBsetsockopt()\fR and \fBgetsockopt()\fR at the
+\&\f(CW\*(C`SOL_SOCKET\*(C'\fR level.
+.SS "IP_OPTIONS, IP_TOS, IP_TTL, ..."
+.IX Subsection "IP_OPTIONS, IP_TOS, IP_TTL, ..."
+Socket option name constants for IPv4 socket options at the \f(CW\*(C`IPPROTO_IP\*(C'\fR
+level.
+.SS "IP_PMTUDISC_WANT, IP_PMTUDISC_DONT, ..."
+.IX Subsection "IP_PMTUDISC_WANT, IP_PMTUDISC_DONT, ..."
+Socket option value constants for \f(CW\*(C`IP_MTU_DISCOVER\*(C'\fR socket option.
+.SS "IPTOS_LOWDELAY, IPTOS_THROUGHPUT, IPTOS_RELIABILITY, ..."
+.IX Subsection "IPTOS_LOWDELAY, IPTOS_THROUGHPUT, IPTOS_RELIABILITY, ..."
+Socket option value constants for \f(CW\*(C`IP_TOS\*(C'\fR socket option.
+.SS "MSG_BCAST, MSG_OOB, MSG_TRUNC, ..."
+.IX Subsection "MSG_BCAST, MSG_OOB, MSG_TRUNC, ..."
+Message flag constants for \fBsend()\fR and \fBrecv()\fR.
+.SS "SHUT_RD, SHUT_RDWR, SHUT_WR"
+.IX Subsection "SHUT_RD, SHUT_RDWR, SHUT_WR"
+Direction constants for \fBshutdown()\fR.
+.SS "INADDR_ANY, INADDR_BROADCAST, INADDR_LOOPBACK, INADDR_NONE"
+.IX Subsection "INADDR_ANY, INADDR_BROADCAST, INADDR_LOOPBACK, INADDR_NONE"
+Constants giving the special \f(CW\*(C`AF_INET\*(C'\fR addresses for wildcard, broadcast,
+local loopback, and invalid addresses.
+.PP
+Normally equivalent to inet_aton('0.0.0.0'), inet_aton('255.255.255.255'),
+inet_aton('localhost') and inet_aton('255.255.255.255') respectively.
+.SS "IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP, ..."
+.IX Subsection "IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP, ..."
+IP protocol constants to use as the third argument to \fBsocket()\fR, the level
+argument to \fBgetsockopt()\fR or \fBsetsockopt()\fR, or the value of the \f(CW\*(C`SO_PROTOCOL\*(C'\fR
+socket option.
+.SS "TCP_CORK, TCP_KEEPALIVE, TCP_NODELAY, ..."
+.IX Subsection "TCP_CORK, TCP_KEEPALIVE, TCP_NODELAY, ..."
+Socket option name constants for TCP socket options at the \f(CW\*(C`IPPROTO_TCP\*(C'\fR
+level.
+.SS "IN6ADDR_ANY, IN6ADDR_LOOPBACK"
+.IX Subsection "IN6ADDR_ANY, IN6ADDR_LOOPBACK"
+Constants giving the special \f(CW\*(C`AF_INET6\*(C'\fR addresses for wildcard and local
+loopback.
+.PP
+Normally equivalent to inet_pton(AF_INET6, "::") and
+inet_pton(AF_INET6, "::1") respectively.
+.SS "IPV6_ADD_MEMBERSHIP, IPV6_MTU, IPV6_V6ONLY, ..."
+.IX Subsection "IPV6_ADD_MEMBERSHIP, IPV6_MTU, IPV6_V6ONLY, ..."
+Socket option name constants for IPv6 socket options at the \f(CW\*(C`IPPROTO_IPV6\*(C'\fR
+level.
+.SH "STRUCTURE MANIPULATORS"
+.IX Header "STRUCTURE MANIPULATORS"
+The following functions convert between lists of Perl values and packed binary
+strings representing structures.
+.ie n .SS "$family = sockaddr_family $sockaddr"
+.el .SS "\f(CW$family\fP = sockaddr_family \f(CW$sockaddr\fP"
+.IX Subsection "$family = sockaddr_family $sockaddr"
+Takes a packed socket address (as returned by \fBpack_sockaddr_in()\fR,
+\&\fBpack_sockaddr_un()\fR or the perl builtin functions \fBgetsockname()\fR and
+\&\fBgetpeername()\fR). Returns the address family tag. This will be one of the
+\&\f(CW\*(C`AF_*\*(C'\fR constants, such as \f(CW\*(C`AF_INET\*(C'\fR for a \f(CW\*(C`sockaddr_in\*(C'\fR addresses or
+\&\f(CW\*(C`AF_UNIX\*(C'\fR for a \f(CW\*(C`sockaddr_un\*(C'\fR. It can be used to figure out what unpack to
+use for a sockaddr of unknown type.
+.ie n .SS "$sockaddr = pack_sockaddr_in $port, $ip_address"
+.el .SS "\f(CW$sockaddr\fP = pack_sockaddr_in \f(CW$port\fP, \f(CW$ip_address\fP"
+.IX Subsection "$sockaddr = pack_sockaddr_in $port, $ip_address"
+Takes two arguments, a port number and an opaque string (as returned by
+\&\fBinet_aton()\fR, or a v\-string). Returns the \f(CW\*(C`sockaddr_in\*(C'\fR structure with those
+arguments packed in and \f(CW\*(C`AF_INET\*(C'\fR filled in. For Internet domain sockets,
+this structure is normally what you need for the arguments in \fBbind()\fR,
+\&\fBconnect()\fR, and \fBsend()\fR.
+.PP
+An undefined \f(CW$port\fR argument is taken as zero; an undefined \f(CW$ip_address\fR is
+considered a fatal error.
+.ie n .SS "($port, $ip_address) = unpack_sockaddr_in $sockaddr"
+.el .SS "($port, \f(CW$ip_address\fP) = unpack_sockaddr_in \f(CW$sockaddr\fP"
+.IX Subsection "($port, $ip_address) = unpack_sockaddr_in $sockaddr"
+Takes a \f(CW\*(C`sockaddr_in\*(C'\fR structure (as returned by \fBpack_sockaddr_in()\fR,
+\&\fBgetpeername()\fR or \fBrecv()\fR). Returns a list of two elements: the port and an
+opaque string representing the IP address (you can use \fBinet_ntoa()\fR to convert
+the address to the four-dotted numeric format). Will croak if the structure
+does not represent an \f(CW\*(C`AF_INET\*(C'\fR address.
+.PP
+In scalar context will return just the IP address.
+.ie n .SS "$sockaddr = sockaddr_in $port, $ip_address"
+.el .SS "\f(CW$sockaddr\fP = sockaddr_in \f(CW$port\fP, \f(CW$ip_address\fP"
+.IX Subsection "$sockaddr = sockaddr_in $port, $ip_address"
+.ie n .SS "($port, $ip_address) = sockaddr_in $sockaddr"
+.el .SS "($port, \f(CW$ip_address\fP) = sockaddr_in \f(CW$sockaddr\fP"
+.IX Subsection "($port, $ip_address) = sockaddr_in $sockaddr"
+A wrapper of \fBpack_sockaddr_in()\fR or \fBunpack_sockaddr_in()\fR. In list context,
+unpacks its argument and returns a list consisting of the port and IP address.
+In scalar context, packs its port and IP address arguments as a \f(CW\*(C`sockaddr_in\*(C'\fR
+and returns it.
+.PP
+Provided largely for legacy compatibility; it is better to use
+\&\fBpack_sockaddr_in()\fR or \fBunpack_sockaddr_in()\fR explicitly.
+.ie n .SS "$sockaddr = pack_sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]"
+.el .SS "\f(CW$sockaddr\fP = pack_sockaddr_in6 \f(CW$port\fP, \f(CW$ip6_address\fP, [$scope_id, [$flowinfo]]"
+.IX Subsection "$sockaddr = pack_sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]"
+Takes two to four arguments, a port number, an opaque string (as returned by
+\&\fBinet_pton()\fR), optionally a scope ID number, and optionally a flow label
+number. Returns the \f(CW\*(C`sockaddr_in6\*(C'\fR structure with those arguments packed in
+and \f(CW\*(C`AF_INET6\*(C'\fR filled in. IPv6 equivalent of \fBpack_sockaddr_in()\fR.
+.PP
+An undefined \f(CW$port\fR argument is taken as zero; an undefined \f(CW$ip6_address\fR is
+considered a fatal error.
+.ie n .SS "($port, $ip6_address, $scope_id, $flowinfo) = unpack_sockaddr_in6 $sockaddr"
+.el .SS "($port, \f(CW$ip6_address\fP, \f(CW$scope_id\fP, \f(CW$flowinfo\fP) = unpack_sockaddr_in6 \f(CW$sockaddr\fP"
+.IX Subsection "($port, $ip6_address, $scope_id, $flowinfo) = unpack_sockaddr_in6 $sockaddr"
+Takes a \f(CW\*(C`sockaddr_in6\*(C'\fR structure. Returns a list of four elements: the port
+number, an opaque string representing the IPv6 address, the scope ID, and the
+flow label. (You can use \fBinet_ntop()\fR to convert the address to the usual
+string format). Will croak if the structure does not represent an \f(CW\*(C`AF_INET6\*(C'\fR
+address.
+.PP
+In scalar context will return just the IP address.
+.ie n .SS "$sockaddr = sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]"
+.el .SS "\f(CW$sockaddr\fP = sockaddr_in6 \f(CW$port\fP, \f(CW$ip6_address\fP, [$scope_id, [$flowinfo]]"
+.IX Subsection "$sockaddr = sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]"
+.ie n .SS "($port, $ip6_address, $scope_id, $flowinfo) = sockaddr_in6 $sockaddr"
+.el .SS "($port, \f(CW$ip6_address\fP, \f(CW$scope_id\fP, \f(CW$flowinfo\fP) = sockaddr_in6 \f(CW$sockaddr\fP"
+.IX Subsection "($port, $ip6_address, $scope_id, $flowinfo) = sockaddr_in6 $sockaddr"
+A wrapper of \fBpack_sockaddr_in6()\fR or \fBunpack_sockaddr_in6()\fR. In list context,
+unpacks its argument according to \fBunpack_sockaddr_in6()\fR. In scalar context,
+packs its arguments according to \fBpack_sockaddr_in6()\fR.
+.PP
+Provided largely for legacy compatibility; it is better to use
+\&\fBpack_sockaddr_in6()\fR or \fBunpack_sockaddr_in6()\fR explicitly.
+.ie n .SS "$sockaddr = pack_sockaddr_un $path"
+.el .SS "\f(CW$sockaddr\fP = pack_sockaddr_un \f(CW$path\fP"
+.IX Subsection "$sockaddr = pack_sockaddr_un $path"
+Takes one argument, a pathname. Returns the \f(CW\*(C`sockaddr_un\*(C'\fR structure with that
+path packed in with \f(CW\*(C`AF_UNIX\*(C'\fR filled in. For \f(CW\*(C`PF_UNIX\*(C'\fR sockets, this
+structure is normally what you need for the arguments in \fBbind()\fR, \fBconnect()\fR,
+and \fBsend()\fR.
+.ie n .SS "($path) = unpack_sockaddr_un $sockaddr"
+.el .SS "($path) = unpack_sockaddr_un \f(CW$sockaddr\fP"
+.IX Subsection "($path) = unpack_sockaddr_un $sockaddr"
+Takes a \f(CW\*(C`sockaddr_un\*(C'\fR structure (as returned by \fBpack_sockaddr_un()\fR,
+\&\fBgetpeername()\fR or \fBrecv()\fR). Returns a list of one element: the pathname. Will
+croak if the structure does not represent an \f(CW\*(C`AF_UNIX\*(C'\fR address.
+.ie n .SS "$sockaddr = sockaddr_un $path"
+.el .SS "\f(CW$sockaddr\fP = sockaddr_un \f(CW$path\fP"
+.IX Subsection "$sockaddr = sockaddr_un $path"
+.ie n .SS "($path) = sockaddr_un $sockaddr"
+.el .SS "($path) = sockaddr_un \f(CW$sockaddr\fP"
+.IX Subsection "($path) = sockaddr_un $sockaddr"
+A wrapper of \fBpack_sockaddr_un()\fR or \fBunpack_sockaddr_un()\fR. In a list context,
+unpacks its argument and returns a list consisting of the pathname. In a
+scalar context, packs its pathname as a \f(CW\*(C`sockaddr_un\*(C'\fR and returns it.
+.PP
+Provided largely for legacy compatibility; it is better to use
+\&\fBpack_sockaddr_un()\fR or \fBunpack_sockaddr_un()\fR explicitly.
+.PP
+These are only supported if your system has <\fIsys/un.h\fR>.
+.ie n .SS "$ip_mreq = pack_ip_mreq $multiaddr, $interface"
+.el .SS "\f(CW$ip_mreq\fP = pack_ip_mreq \f(CW$multiaddr\fP, \f(CW$interface\fP"
+.IX Subsection "$ip_mreq = pack_ip_mreq $multiaddr, $interface"
+Takes an IPv4 multicast address and optionally an interface address (or
+\&\f(CW\*(C`INADDR_ANY\*(C'\fR). Returns the \f(CW\*(C`ip_mreq\*(C'\fR structure with those arguments packed
+in. Suitable for use with the \f(CW\*(C`IP_ADD_MEMBERSHIP\*(C'\fR and \f(CW\*(C`IP_DROP_MEMBERSHIP\*(C'\fR
+sockopts.
+.ie n .SS "($multiaddr, $interface) = unpack_ip_mreq $ip_mreq"
+.el .SS "($multiaddr, \f(CW$interface\fP) = unpack_ip_mreq \f(CW$ip_mreq\fP"
+.IX Subsection "($multiaddr, $interface) = unpack_ip_mreq $ip_mreq"
+Takes an \f(CW\*(C`ip_mreq\*(C'\fR structure. Returns a list of two elements; the IPv4
+multicast address and interface address.
+.ie n .SS "$ip_mreq_source = pack_ip_mreq_source $multiaddr, $source, $interface"
+.el .SS "\f(CW$ip_mreq_source\fP = pack_ip_mreq_source \f(CW$multiaddr\fP, \f(CW$source\fP, \f(CW$interface\fP"
+.IX Subsection "$ip_mreq_source = pack_ip_mreq_source $multiaddr, $source, $interface"
+Takes an IPv4 multicast address, source address, and optionally an interface
+address (or \f(CW\*(C`INADDR_ANY\*(C'\fR). Returns the \f(CW\*(C`ip_mreq_source\*(C'\fR structure with those
+arguments packed in. Suitable for use with the \f(CW\*(C`IP_ADD_SOURCE_MEMBERSHIP\*(C'\fR
+and \f(CW\*(C`IP_DROP_SOURCE_MEMBERSHIP\*(C'\fR sockopts.
+.ie n .SS "($multiaddr, $source, $interface) = unpack_ip_mreq_source $ip_mreq"
+.el .SS "($multiaddr, \f(CW$source\fP, \f(CW$interface\fP) = unpack_ip_mreq_source \f(CW$ip_mreq\fP"
+.IX Subsection "($multiaddr, $source, $interface) = unpack_ip_mreq_source $ip_mreq"
+Takes an \f(CW\*(C`ip_mreq_source\*(C'\fR structure. Returns a list of three elements; the
+IPv4 multicast address, source address and interface address.
+.ie n .SS "$ipv6_mreq = pack_ipv6_mreq $multiaddr6, $ifindex"
+.el .SS "\f(CW$ipv6_mreq\fP = pack_ipv6_mreq \f(CW$multiaddr6\fP, \f(CW$ifindex\fP"
+.IX Subsection "$ipv6_mreq = pack_ipv6_mreq $multiaddr6, $ifindex"
+Takes an IPv6 multicast address and an interface number. Returns the
+\&\f(CW\*(C`ipv6_mreq\*(C'\fR structure with those arguments packed in. Suitable for use with
+the \f(CW\*(C`IPV6_ADD_MEMBERSHIP\*(C'\fR and \f(CW\*(C`IPV6_DROP_MEMBERSHIP\*(C'\fR sockopts.
+.ie n .SS "($multiaddr6, $ifindex) = unpack_ipv6_mreq $ipv6_mreq"
+.el .SS "($multiaddr6, \f(CW$ifindex\fP) = unpack_ipv6_mreq \f(CW$ipv6_mreq\fP"
+.IX Subsection "($multiaddr6, $ifindex) = unpack_ipv6_mreq $ipv6_mreq"
+Takes an \f(CW\*(C`ipv6_mreq\*(C'\fR structure. Returns a list of two elements; the IPv6
+address and an interface number.
+.SH FUNCTIONS
+.IX Header "FUNCTIONS"
+.ie n .SS "$ip_address = inet_aton $string"
+.el .SS "\f(CW$ip_address\fP = inet_aton \f(CW$string\fP"
+.IX Subsection "$ip_address = inet_aton $string"
+Takes a string giving the name of a host, or a textual representation of an IP
+address and translates that to an packed binary address structure suitable to
+pass to \fBpack_sockaddr_in()\fR. If passed a hostname that cannot be resolved,
+returns \f(CW\*(C`undef\*(C'\fR. For multi-homed hosts (hosts with more than one address),
+the first address found is returned.
+.PP
+For portability do not assume that the result of \fBinet_aton()\fR is 32 bits wide,
+in other words, that it would contain only the IPv4 address in network order.
+.PP
+This IPv4\-only function is provided largely for legacy reasons. Newly-written
+code should use \fBgetaddrinfo()\fR or \fBinet_pton()\fR instead for IPv6 support.
+.ie n .SS "$string = inet_ntoa $ip_address"
+.el .SS "\f(CW$string\fP = inet_ntoa \f(CW$ip_address\fP"
+.IX Subsection "$string = inet_ntoa $ip_address"
+Takes a packed binary address structure such as returned by
+\&\fBunpack_sockaddr_in()\fR (or a v\-string representing the four octets of the IPv4
+address in network order) and translates it into a string of the form
+\&\f(CW\*(C`d.d.d.d\*(C'\fR where the \f(CW\*(C`d\*(C'\fRs are numbers less than 256 (the normal
+human-readable four dotted number notation for Internet addresses).
+.PP
+This IPv4\-only function is provided largely for legacy reasons. Newly-written
+code should use \fBgetnameinfo()\fR or \fBinet_ntop()\fR instead for IPv6 support.
+.ie n .SS "$address = inet_pton $family, $string"
+.el .SS "\f(CW$address\fP = inet_pton \f(CW$family\fP, \f(CW$string\fP"
+.IX Subsection "$address = inet_pton $family, $string"
+Takes an address family (such as \f(CW\*(C`AF_INET\*(C'\fR or \f(CW\*(C`AF_INET6\*(C'\fR) and a string
+containing a textual representation of an address in that family and
+translates that to an packed binary address structure.
+.PP
+See also \fBgetaddrinfo()\fR for a more powerful and flexible function to look up
+socket addresses given hostnames or textual addresses.
+.ie n .SS "$string = inet_ntop $family, $address"
+.el .SS "\f(CW$string\fP = inet_ntop \f(CW$family\fP, \f(CW$address\fP"
+.IX Subsection "$string = inet_ntop $family, $address"
+Takes an address family and a packed binary address structure and translates
+it into a human-readable textual representation of the address; typically in
+\&\f(CW\*(C`d.d.d.d\*(C'\fR form for \f(CW\*(C`AF_INET\*(C'\fR or \f(CW\*(C`hhhh:hhhh::hhhh\*(C'\fR form for \f(CW\*(C`AF_INET6\*(C'\fR.
+.PP
+See also \fBgetnameinfo()\fR for a more powerful and flexible function to turn
+socket addresses into human-readable textual representations.
+.ie n .SS "($err, @result) = getaddrinfo $host, $service, [$hints]"
+.el .SS "($err, \f(CW@result\fP) = getaddrinfo \f(CW$host\fP, \f(CW$service\fP, [$hints]"
+.IX Subsection "($err, @result) = getaddrinfo $host, $service, [$hints]"
+Given both a hostname and service name, this function attempts to resolve the
+host name into a list of network addresses, and the service name into a
+protocol and port number, and then returns a list of address structures
+suitable to \fBconnect()\fR to it.
+.PP
+Given just a host name, this function attempts to resolve it to a list of
+network addresses, and then returns a list of address structures giving these
+addresses.
+.PP
+Given just a service name, this function attempts to resolve it to a protocol
+and port number, and then returns a list of address structures that represent
+it suitable to \fBbind()\fR to. This use should be combined with the \f(CW\*(C`AI_PASSIVE\*(C'\fR
+flag; see below.
+.PP
+Given neither name, it generates an error.
+.PP
+If present, \f(CW$hints\fR should be a reference to a hash, where the following keys
+are recognised:
+.IP "flags => INT" 4
+.IX Item "flags => INT"
+A bitfield containing \f(CW\*(C`AI_*\*(C'\fR constants; see below.
+.IP "family => INT" 4
+.IX Item "family => INT"
+Restrict to only generating addresses in this address family
+.IP "socktype => INT" 4
+.IX Item "socktype => INT"
+Restrict to only generating addresses of this socket type
+.IP "protocol => INT" 4
+.IX Item "protocol => INT"
+Restrict to only generating addresses for this protocol
+.PP
+The return value will be a list; the first value being an error indication,
+followed by a list of address structures (if no error occurred).
+.PP
+The error value will be a dualvar; comparable to the \f(CW\*(C`EAI_*\*(C'\fR error constants,
+or printable as a human-readable error message string. If no error occurred it
+will be zero numerically and an empty string.
+.PP
+Each value in the results list will be a hash reference containing the following
+fields:
+.IP "family => INT" 4
+.IX Item "family => INT"
+The address family (e.g. \f(CW\*(C`AF_INET\*(C'\fR)
+.IP "socktype => INT" 4
+.IX Item "socktype => INT"
+The socket type (e.g. \f(CW\*(C`SOCK_STREAM\*(C'\fR)
+.IP "protocol => INT" 4
+.IX Item "protocol => INT"
+The protocol (e.g. \f(CW\*(C`IPPROTO_TCP\*(C'\fR)
+.IP "addr => STRING" 4
+.IX Item "addr => STRING"
+The address in a packed string (such as would be returned by
+\&\fBpack_sockaddr_in()\fR)
+.IP "canonname => STRING" 4
+.IX Item "canonname => STRING"
+The canonical name for the host if the \f(CW\*(C`AI_CANONNAME\*(C'\fR flag was provided, or
+\&\f(CW\*(C`undef\*(C'\fR otherwise. This field will only be present on the first returned
+address.
+.PP
+The following flag constants are recognised in the \f(CW$hints\fR hash. Other flag
+constants may exist as provided by the OS.
+.IP AI_PASSIVE 4
+.IX Item "AI_PASSIVE"
+Indicates that this resolution is for a local \fBbind()\fR for a passive (i.e.
+listening) socket, rather than an active (i.e. connecting) socket.
+.IP AI_CANONNAME 4
+.IX Item "AI_CANONNAME"
+Indicates that the caller wishes the canonical hostname (\f(CW\*(C`canonname\*(C'\fR) field
+of the result to be filled in.
+.IP AI_NUMERICHOST 4
+.IX Item "AI_NUMERICHOST"
+Indicates that the caller will pass a numeric address, rather than a hostname,
+and that \fBgetaddrinfo()\fR must not perform a resolve operation on this name. This
+flag will prevent a possibly-slow network lookup operation, and instead return
+an error if a hostname is passed.
+.ie n .SS "($err, $hostname, $servicename) = getnameinfo $sockaddr, [$flags, [$xflags]]"
+.el .SS "($err, \f(CW$hostname\fP, \f(CW$servicename\fP) = getnameinfo \f(CW$sockaddr\fP, [$flags, [$xflags]]"
+.IX Subsection "($err, $hostname, $servicename) = getnameinfo $sockaddr, [$flags, [$xflags]]"
+Given a packed socket address (such as from \fBgetsockname()\fR, \fBgetpeername()\fR, or
+returned by \fBgetaddrinfo()\fR in a \f(CW\*(C`addr\*(C'\fR field), returns the hostname and
+symbolic service name it represents. \f(CW$flags\fR may be a bitmask of \f(CW\*(C`NI_*\*(C'\fR
+constants, or defaults to 0 if unspecified.
+.PP
+The return value will be a list; the first value being an error condition,
+followed by the hostname and service name.
+.PP
+The error value will be a dualvar; comparable to the \f(CW\*(C`EAI_*\*(C'\fR error constants,
+or printable as a human-readable error message string. The host and service
+names will be plain strings.
+.PP
+The following flag constants are recognised as \f(CW$flags\fR. Other flag constants may
+exist as provided by the OS.
+.IP NI_NUMERICHOST 4
+.IX Item "NI_NUMERICHOST"
+Requests that a human-readable string representation of the numeric address be
+returned directly, rather than performing a name resolve operation that may
+convert it into a hostname. This will also avoid potentially-blocking network
+IO.
+.IP NI_NUMERICSERV 4
+.IX Item "NI_NUMERICSERV"
+Requests that the port number be returned directly as a number representation
+rather than performing a name resolve operation that may convert it into a
+service name.
+.IP NI_NAMEREQD 4
+.IX Item "NI_NAMEREQD"
+If a name resolve operation fails to provide a name, then this flag will cause
+\&\fBgetnameinfo()\fR to indicate an error, rather than returning the numeric
+representation as a human-readable string.
+.IP NI_DGRAM 4
+.IX Item "NI_DGRAM"
+Indicates that the socket address relates to a \f(CW\*(C`SOCK_DGRAM\*(C'\fR socket, for the
+services whose name differs between TCP and UDP protocols.
+.PP
+The following constants may be supplied as \f(CW$xflags\fR.
+.IP NIx_NOHOST 4
+.IX Item "NIx_NOHOST"
+Indicates that the caller is not interested in the hostname of the result, so
+it does not have to be converted. \f(CW\*(C`undef\*(C'\fR will be returned as the hostname.
+.IP NIx_NOSERV 4
+.IX Item "NIx_NOSERV"
+Indicates that the caller is not interested in the service name of the result,
+so it does not have to be converted. \f(CW\*(C`undef\*(C'\fR will be returned as the service
+name.
+.SH "\fBgetaddrinfo()\fP / \fBgetnameinfo()\fP ERROR CONSTANTS"
+.IX Header "getaddrinfo() / getnameinfo() ERROR CONSTANTS"
+The following constants may be returned by \fBgetaddrinfo()\fR or \fBgetnameinfo()\fR.
+Others may be provided by the OS.
+.IP EAI_AGAIN 4
+.IX Item "EAI_AGAIN"
+A temporary failure occurred during name resolution. The operation may be
+successful if it is retried later.
+.IP EAI_BADFLAGS 4
+.IX Item "EAI_BADFLAGS"
+The value of the \f(CW\*(C`flags\*(C'\fR hint to \fBgetaddrinfo()\fR, or the \f(CW$flags\fR parameter to
+\&\fBgetnameinfo()\fR contains unrecognised flags.
+.IP EAI_FAMILY 4
+.IX Item "EAI_FAMILY"
+The \f(CW\*(C`family\*(C'\fR hint to \fBgetaddrinfo()\fR, or the family of the socket address
+passed to \fBgetnameinfo()\fR is not supported.
+.IP EAI_NODATA 4
+.IX Item "EAI_NODATA"
+The host name supplied to \fBgetaddrinfo()\fR did not provide any usable address
+data.
+.IP EAI_NONAME 4
+.IX Item "EAI_NONAME"
+The host name supplied to \fBgetaddrinfo()\fR does not exist, or the address
+supplied to \fBgetnameinfo()\fR is not associated with a host name and the
+\&\f(CW\*(C`NI_NAMEREQD\*(C'\fR flag was supplied.
+.IP EAI_SERVICE 4
+.IX Item "EAI_SERVICE"
+The service name supplied to \fBgetaddrinfo()\fR is not available for the socket
+type given in the \f(CW$hints\fR.
+.SH EXAMPLES
+.IX Header "EXAMPLES"
+.SS "Lookup for \fBconnect()\fP"
+.IX Subsection "Lookup for connect()"
+The \fBgetaddrinfo()\fR function converts a hostname and a service name into a list
+of structures, each containing a potential way to \fBconnect()\fR to the named
+service on the named host.
+.PP
+.Vb 2
+\& use IO::Socket;
+\& use Socket qw(SOCK_STREAM getaddrinfo);
+\&
+\& my %hints = (socktype => SOCK_STREAM);
+\& my ($err, @res) = getaddrinfo("localhost", "echo", \e%hints);
+\& die "Cannot getaddrinfo \- $err" if $err;
+\&
+\& my $sock;
+\&
+\& foreach my $ai (@res) {
+\& my $candidate = IO::Socket\->new();
+\&
+\& $candidate\->socket($ai\->{family}, $ai\->{socktype}, $ai\->{protocol})
+\& or next;
+\&
+\& $candidate\->connect($ai\->{addr})
+\& or next;
+\&
+\& $sock = $candidate;
+\& last;
+\& }
+\&
+\& die "Cannot connect to localhost:echo" unless $sock;
+\&
+\& $sock\->print("Hello, world!\en");
+\& print <$sock>;
+.Ve
+.PP
+Because a list of potential candidates is returned, the \f(CW\*(C`while\*(C'\fR loop tries
+each in turn until it finds one that succeeds both the \fBsocket()\fR and \fBconnect()\fR
+calls.
+.PP
+This function performs the work of the legacy functions \fBgethostbyname()\fR,
+\&\fBgetservbyname()\fR, \fBinet_aton()\fR and \fBpack_sockaddr_in()\fR.
+.PP
+In practice this logic is better performed by IO::Socket::IP.
+.SS "Making a human-readable string out of an address"
+.IX Subsection "Making a human-readable string out of an address"
+The \fBgetnameinfo()\fR function converts a socket address, such as returned by
+\&\fBgetsockname()\fR or \fBgetpeername()\fR, into a pair of human-readable strings
+representing the address and service name.
+.PP
+.Vb 2
+\& use IO::Socket::IP;
+\& use Socket qw(getnameinfo);
+\&
+\& my $server = IO::Socket::IP\->new(LocalPort => 12345, Listen => 1) or
+\& die "Cannot listen \- $@";
+\&
+\& my $socket = $server\->accept or die "accept: $!";
+\&
+\& my ($err, $hostname, $servicename) = getnameinfo($socket\->peername);
+\& die "Cannot getnameinfo \- $err" if $err;
+\&
+\& print "The peer is connected from $hostname\en";
+.Ve
+.PP
+Since in this example only the hostname was used, the redundant conversion of
+the port number into a service name may be omitted by passing the
+\&\f(CW\*(C`NIx_NOSERV\*(C'\fR flag.
+.PP
+.Vb 1
+\& use Socket qw(getnameinfo NIx_NOSERV);
+\&
+\& my ($err, $hostname) = getnameinfo($socket\->peername, 0, NIx_NOSERV);
+.Ve
+.PP
+This function performs the work of the legacy functions \fBunpack_sockaddr_in()\fR,
+\&\fBinet_ntoa()\fR, \fBgethostbyaddr()\fR and \fBgetservbyport()\fR.
+.PP
+In practice this logic is better performed by IO::Socket::IP.
+.SS "Resolving hostnames into IP addresses"
+.IX Subsection "Resolving hostnames into IP addresses"
+To turn a hostname into a human-readable plain IP address use \fBgetaddrinfo()\fR
+to turn the hostname into a list of socket structures, then \fBgetnameinfo()\fR on
+each one to make it a readable IP address again.
+.PP
+.Vb 1
+\& use Socket qw(:addrinfo SOCK_RAW);
+\&
+\& my ($err, @res) = getaddrinfo($hostname, "", {socktype => SOCK_RAW});
+\& die "Cannot getaddrinfo \- $err" if $err;
+\&
+\& while( my $ai = shift @res ) {
+\& my ($err, $ipaddr) = getnameinfo($ai\->{addr}, NI_NUMERICHOST, NIx_NOSERV);
+\& die "Cannot getnameinfo \- $err" if $err;
+\&
+\& print "$ipaddr\en";
+\& }
+.Ve
+.PP
+The \f(CW\*(C`socktype\*(C'\fR hint to \fBgetaddrinfo()\fR filters the results to only include one
+socket type and protocol. Without this most OSes return three combinations,
+for \f(CW\*(C`SOCK_STREAM\*(C'\fR, \f(CW\*(C`SOCK_DGRAM\*(C'\fR and \f(CW\*(C`SOCK_RAW\*(C'\fR, resulting in triplicate
+output of addresses. The \f(CW\*(C`NI_NUMERICHOST\*(C'\fR flag to \fBgetnameinfo()\fR causes it to
+return a string-formatted plain IP address, rather than reverse resolving it
+back into a hostname.
+.PP
+This combination performs the work of the legacy functions \fBgethostbyname()\fR
+and \fBinet_ntoa()\fR.
+.SS "Accessing socket options"
+.IX Subsection "Accessing socket options"
+The many \f(CW\*(C`SO_*\*(C'\fR and other constants provide the socket option names for
+\&\fBgetsockopt()\fR and \fBsetsockopt()\fR.
+.PP
+.Vb 2
+\& use IO::Socket::INET;
+\& use Socket qw(SOL_SOCKET SO_RCVBUF IPPROTO_IP IP_TTL);
+\&
+\& my $socket = IO::Socket::INET\->new(LocalPort => 0, Proto => \*(Aqudp\*(Aq)
+\& or die "Cannot create socket: $@";
+\&
+\& $socket\->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or
+\& die "setsockopt: $!";
+\&
+\& print "Receive buffer is ", $socket\->getsockopt(SOL_SOCKET, SO_RCVBUF),
+\& " bytes\en";
+\&
+\& print "IP TTL is ", $socket\->getsockopt(IPPROTO_IP, IP_TTL), "\en";
+.Ve
+.PP
+As a convenience, IO::Socket's \fBsetsockopt()\fR method will convert a number
+into a packed byte buffer, and \fBgetsockopt()\fR will unpack a byte buffer of the
+correct size back into a number.
+.SH AUTHOR
+.IX Header "AUTHOR"
+This module was originally maintained in Perl core by the Perl 5 Porters.
+.PP
+It was extracted to dual-life on CPAN at version 1.95 by
+Paul Evans <leonerd@leonerd.org.uk>