.\" -*- 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 "Socket6 3" .TH Socket6 3 2023-07-25 "perl v5.38.0" "User Contributed Perl Documentation" .\" 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 Socket6 \- IPv6 related part of the C socket.h defines and structure manipulators .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 2 \& use Socket; \& use Socket6; \& \& @res = getaddrinfo(\*(Aqhishost.com\*(Aq, \*(Aqdaytime\*(Aq, AF_UNSPEC, SOCK_STREAM); \& $family = \-1; \& while (scalar(@res) >= 5) { \& ($family, $socktype, $proto, $saddr, $canonname, @res) = @res; \& \& ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV); \& print STDERR "Trying to connect to $host port $port...\en"; \& \& socket(Socket_Handle, $family, $socktype, $proto) || next; \& connect(Socket_Handle, $saddr) && last; \& \& close(Socket_Handle); \& $family = \-1; \& } \& \& if ($family != \-1) { \& print STDERR "connected to $host port $port\en"; \& } else { \& die "connect attempt failed\en"; \& } .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" This module provides glue routines to the various IPv6 functions. .PP If you use the Socket6 module, be sure to specify "use Socket" as well as "use Socket6". .PP Functions supplied are: .IP "inet_pton FAMILY, TEXT_ADDRESS" 4 .IX Item "inet_pton FAMILY, TEXT_ADDRESS" .Vb 4 \& This function takes an IP address in presentation (or string) format \& and converts it into numeric (or binary) format. \& The type of IP address conversion (IPv4 versus IPv6) is controlled \& by the FAMILY argument. .Ve .IP "inet_ntop FAMILY, BINARY_ADDRESS" 4 .IX Item "inet_ntop FAMILY, BINARY_ADDRESS" .Vb 4 \& This function takes an IP address in numeric (or binary) format \& and converts it into presentation (or string) format \& The type of IP address conversion (IPv4 versus IPv6) is controlled \& by the FAMILY argument. .Ve .IP "pack_sockaddr_in6 PORT, ADDR" 4 .IX Item "pack_sockaddr_in6 PORT, ADDR" .Vb 5 \& This function takes two arguments: a port number, and a 16\-octet \& IPv6 address structure (as returned by inet_pton()). \& It returns the sockaddr_in6 structure with these arguments packed \& into their correct fields, as well as the AF_INET6 family. \& The other fields are not set and their values should not be relied upon. .Ve .IP "pack_sockaddr_in6_all PORT, FLOWINFO, ADDR, SCOPEID" 4 .IX Item "pack_sockaddr_in6_all PORT, FLOWINFO, ADDR, SCOPEID" .Vb 5 \& This function takes four arguments: a port number, a 16\-octet \& IPv6 address structure (as returned by inet_pton), any \& special flow information, and any specific scope information. \& It returns a complete sockaddr_in6 structure with these arguments packed \& into their correct fields, as well as the AF_INET6 family. .Ve .IP "unpack_sockaddr_in6 NAME" 4 .IX Item "unpack_sockaddr_in6 NAME" .Vb 5 \& This function takes a sockaddr_in6 structure (as returned by \& pack_sockaddr_in6()) and returns a list of two elements: \& the port number and the 16\-octet IP address. \& This function will croak if it determines it has not been \& passed an IPv6 structure. .Ve .IP "unpack_sockaddr_in6_all NAME" 4 .IX Item "unpack_sockaddr_in6_all NAME" .Vb 6 \& This function takes a sockaddr_in6 structure (as returned by \& pack_sockaddr_in6()) and returns a list of four elements: \& the port number, the flow information, the 16\-octet IP address, \& and the scope information. \& This function will croak if it determines it has not been \& passed an IPv6 structure. .Ve .IP "gethostbyname2 HOSTNAME, FAMILY" 4 .IX Item "gethostbyname2 HOSTNAME, FAMILY" .PD 0 .IP "getaddrinfo NODENAME, SERVICENAME, [FAMILY, SOCKTYPE, PROTOCOL, FLAGS]" 4 .IX Item "getaddrinfo NODENAME, SERVICENAME, [FAMILY, SOCKTYPE, PROTOCOL, FLAGS]" .PD .Vb 6 \& This function converts node names to addresses and service names \& to port numbers. \& If the NODENAME argument is not a false value, \& then a nodename to address lookup is performed; \& otherwise a service name to port number lookup is performed. \& At least one of NODENAME and SERVICENAME must have a true value. \& \& If the lookup is successful, a list consisting of multiples of \& five elements is returned. \& Each group of five elements consists of the address family, \& socket type, protocol, 16\-octet IP address, and the canonical \& name (undef if the node name passed is already the canonical name). \& \& The arguments FAMILY, SOCKTYPE, PROTOCOL, and FLAGS are all optional. \& \& This function will croak if it determines it has not been \& passed an IPv6 structure. \& \& If the lookup is unsuccessful, the function returns a single scalar. \& This will contain the string version of that error in string context, \& and the numeric value in numeric context. .Ve .IP "getnameinfo NAME, [FLAGS]" 4 .IX Item "getnameinfo NAME, [FLAGS]" .Vb 2 \& This function takes a socket address structure. If successful, it returns \& two strings containing the node name and service name. \& \& The optional FLAGS argument controls what kind of lookup is performed. \& \& If the lookup is unsuccessful, the function returns a single scalar. \& This will contain the string version of that error in string context, \& and the numeric value in numeric context. .Ve .IP "getipnodebyname HOST, [FAMILY, FLAGS]" 4 .IX Item "getipnodebyname HOST, [FAMILY, FLAGS]" .Vb 6 \& This function takes either a node name or an IP address string \& and performs a lookup on that name (or conversion of the string). \& It returns a list of five elements: the canonical host name, \& the address family, the length in octets of the IP addresses \& returned, a reference to a list of IP address structures, and \& a reference to a list of aliases for the host name. \& \& The arguments FAMILY and FLAGS are optional. \& Note: This function does not handle IPv6 scope identifiers, \& and should be used with care. \& And, this function was deprecated in RFC3493. \& The getnameinfo function should be used instead. .Ve .IP "getipnodebyaddr FAMILY, ADDRESS" 4 .IX Item "getipnodebyaddr FAMILY, ADDRESS" .Vb 6 \& This function takes an IP address family and an IP address structure \& and performs a reverse lookup on that address. \& It returns a list of five elements: the canonical host name, \& the address family, the length in octets of the IP addresses \& returned, a reference to a list of IP address structures, and \& a reference to a list of aliases for the host name. \& \& Note: This function does not handle IPv6 scope identifiers, \& and should be used with care. \& And, this function was deprecated in RFC3493. \& The getaddrinfo function should be used instead. .Ve .IP "gai_strerror ERROR_NUMBER" 4 .IX Item "gai_strerror ERROR_NUMBER" .Vb 2 \& This function returns a string corresponding to the error number \& passed in as an argument. .Ve .IP in6addr_any 4 .IX Item "in6addr_any" .Vb 1 \& This function returns the 16\-octet wildcard address. .Ve .IP in6addr_loopback 4 .IX Item "in6addr_loopback" .Vb 1 \& This function returns the 16\-octet loopback address. .Ve