diff options
Diffstat (limited to 'cpan/dist/Socket6/Socket6.pm')
| -rw-r--r-- | cpan/dist/Socket6/Socket6.pm | 178 |
1 files changed, 148 insertions, 30 deletions
diff --git a/cpan/dist/Socket6/Socket6.pm b/cpan/dist/Socket6/Socket6.pm index e39cfb49..c92bf56d 100644 --- a/cpan/dist/Socket6/Socket6.pm +++ b/cpan/dist/Socket6/Socket6.pm @@ -1,12 +1,12 @@ -# Copyright (C) 2000 Hajimu UMEMOTO <ume@mahoroba.org>. +# Copyright (C) 2000-2008 Hajimu UMEMOTO <ume@mahoroba.org>. # All rights reserved. -# +# # This module is besed on perl5.005_55-v6-19990721 written by KAME # Project. # # Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. # All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: @@ -18,7 +18,7 @@ # 3. Neither the name of the project nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -31,16 +31,17 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. -# $Id: Socket6.pm,v 1.13 2000/05/27 10:54:08 ume Exp $ +# $Id: Socket6.pm,v 1.45 2008/11/01 19:08:39 ume Exp $ package Socket6; -use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); -$VERSION = "0.07"; +use strict; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD); +$VERSION = "0.23"; =head1 NAME -Socket6, sockaddr_in6, inet_pton, inet_ntop - load IPv6 related part of the C socket.h defines and structure manipulators +Socket6 - IPv6 related part of the C socket.h defines and structure manipulators =head1 SYNOPSIS @@ -55,7 +56,7 @@ Socket6, sockaddr_in6, inet_pton, inet_ntop - load IPv6 related part of the C so ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV); print STDERR "Trying to connect to $host port port $port...\n"; - socket(Socket_Handle, $family, $saddr, $proto) || next; + socket(Socket_Handle, $family, $socktype, $proto) || next; connect(Socket_Handle, $saddr) && last; close(Socket_Handle); @@ -70,37 +71,138 @@ Socket6, sockaddr_in6, inet_pton, inet_ntop - load IPv6 related part of the C so =head1 DESCRIPTION -This module supports getaddrinfo() and getnameinfo() to intend to -enable protocol independent programing. -If your environment supports IPv6, IPv6 related defines such as -AF_INET6 are included. +This module provides glue routines to the various IPv6 functions. -If you use Socket6 module, be sure to specify "use Socket" as well as -"use Socket6". +If you use the Socket6 module, +be sure to specify "use Socket" as well as "use Socket6". Functions supplied are: -=item inet_pton AF HOST +=item inet_pton FAMILY, TEXT_ADDRESS + + 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. -=item inet_ntop AF ADDR +=item inet_ntop FAMILY, BINARY_ADDRESS -=item pack_sockaddr_in6 PORT ADDR + 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. -=item pack_sockaddr_in6_all PORT FLOWINFO ADDR SCOPEID +=item pack_sockaddr_in6 PORT, ADDR + + 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. + +=item pack_sockaddr_in6_all PORT, FLOWINFO, ADDR, SCOPEID + + 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. =item unpack_sockaddr_in6 NAME + This function takes a sockaddr_in6 structure (as returned by + pack_sockaddr_in6()) and returns a list of 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. + =item unpack_sockaddr_in6_all NAME -=item gethostbyname2 HOSTNAME, SERVNAME + This function takes a sockaddr_in6 structure (as returned by + pack_sockaddr_in6()) and returns a list of 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. + +=item gethostbyname2 HOSTNAME, FAMILY + +=item getaddrinfo NODENAME, SERVICENAME, [FAMILY, SOCKTYPE, PROTOCOL, FLAGS] + + 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. -=item getaddrinfo HOSTNAME, SERVNAME, FAMILY, SOCKTYPE, PROTOCOL, FLAGS +=item getnameinfo NAME, [FLAGS] - Arguments from FAMILY to FLAGS are optional. + This function takes a socket address structure. If successful, it returns + two strings containing the node name and service name. -=item getnameinfo NAME, FLAGS + The optional FLAGS argument controls what kind of lookup is performed. - FLAGS argument is optional. + 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. + +=item getipnodebyname HOST, [FAMILY, FLAGS] + + 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. + +=item getipnodebyaddr FAMILY, ADDRESS + + 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. + +=item gai_strerror ERROR_NUMBER + + This function returns a string corresponding to the error number + passed in as an argument. + +=item in6addr_any + + This function returns the 16-octet wildcard address. + +=item in6add_loopback + + This function returns the 16-octet loopback address. =over @@ -110,24 +212,37 @@ Functions supplied are: use Carp; -require Exporter; -require DynaLoader; -@ISA = qw(Exporter DynaLoader); +use base qw(Exporter DynaLoader); + @EXPORT = qw( inet_pton inet_ntop pack_sockaddr_in6 pack_sockaddr_in6_all unpack_sockaddr_in6 unpack_sockaddr_in6_all sockaddr_in6 gethostbyname2 getaddrinfo getnameinfo in6addr_any in6addr_loopback - AF_INET6 + gai_strerror getipnodebyname getipnodebyaddr AI_ADDRCONFIG AI_ALL AI_CANONNAME AI_NUMERICHOST + AI_NUMERICSERV AI_DEFAULT AI_MASK AI_PASSIVE AI_V4MAPPED AI_V4MAPPED_CFG + EAI_ADDRFAMILY + EAI_AGAIN + EAI_BADFLAGS + EAI_FAIL + EAI_FAMILY + EAI_MEMORY + EAI_NODATA + EAI_NONAME + EAI_SERVICE + EAI_SOCKTYPE + EAI_SYSTEM + EAI_BADHINTS + EAI_PROTOCOL IP_AUTH_TRANS_LEVEL IP_AUTH_NETWORK_LEVEL IP_ESP_TRANS_LEVEL @@ -151,8 +266,11 @@ require DynaLoader; NI_NUMERICSERV NI_DGRAM NI_WITHSCOPEID - PF_INET6 ); +push @EXPORT, qw(AF_INET6) unless defined eval {Socket::AF_INET6()}; +push @EXPORT, qw(PF_INET6) unless defined eval {Socket::PF_INET6()}; + +@EXPORT_OK = qw(AF_INET6 PF_INET6); %EXPORT_TAGS = ( all => [@EXPORT], @@ -171,9 +289,9 @@ sub sockaddr_in6 { sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://o; + $! = 0; my $val = constant($constname, @_ ? $_[0] : 0); if ($! != 0) { - my ($pack, $file, $line) = caller; croak "Your vendor has not defined Socket macro $constname, used"; } eval "sub $AUTOLOAD { $val }"; |
