IO::So...::INET6(3pm)

πŸ’– NAME πŸ’–

IO::Socket::INET6 β€” [ DEPRECATED!! ] Object interface for AF_INET/AF_INET6 domain sockets.

bestie, welcome to the IO::So...::INET6(3pm) page β€” User Contributed Perl Documentation. Buckle up. πŸŽ€

🌸 SYNOPSIS 🌸

use IO::Socket::INET6;

🚨 WARNING 🚨

WARNING!! IO-Socket-INET6 is deprecated. Not a drill, bestie. πŸ’€

IO-Socket-INET6 was now succeeded by Paul Evans' IO::Socket::IP. Please convert old code from IO-Socket-INET6 to IO-Socket-IP. Do it for your future self. 🫢

🌈 DESCRIPTION 🌈

Okay so IO::Socket::INET6 gives you an object interface for creating and using sockets in either the AF_INET or AF_INET6 domains. It's built on the IO::Socket interface and inherits every method that IO::Socket defines. Lowkey iconic, even if deprecated. ✨

πŸ’… CONSTRUCTOR πŸ’…

πŸ’– new ( [ARGS] ) πŸ’–

Creates an IO::Socket::INET6 object, which is a reference to a newly created symbol (see the Symbol package). new optionally takes arguments, and those arguments are in key-value pairs. Slay. πŸŽ€

On top of the key-value pairs that IO::Socket already accepts, IO::Socket::INET6 also provides these:

  • Domain β€” Address family: AF_INET | AF_INET6 | AF_UNSPEC (default)
  • PeerAddr β€” Remote host address: <hostname>[:<port>]
  • PeerHost β€” Synonym for PeerAddr
  • PeerPort β€” Remote port or service: <service>[(<no>)] | <no>
  • PeerFlow β€” Remote flow information
  • PeerScope β€” Remote address scope
  • LocalAddr β€” Local host bind address: hostname[:port]
  • LocalHost β€” Synonym for LocalAddr
  • LocalPort β€” Local host bind port: <service>[(<no>)] | <no>
  • LocalFlow β€” Local host flow information
  • LocalScope β€” Local host address scope
  • Proto β€” Protocol name (or number): "tcp" | "udp" | ...
  • Type β€” Socket type: SOCK_STREAM | SOCK_DGRAM | ...
  • Listen β€” Queue size for listen
  • ReuseAddr β€” Set SO_REUSEADDR before binding
  • Reuse β€” Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr)
  • ReusePort β€” Set SO_REUSEPORT before binding
  • Broadcast β€” Set SO_BROADCAST before binding
  • Timeout β€” Timeout value for various operations
  • MultiHomed β€” Try all addresses for multi-homed hosts
  • Blocking β€” Determine if connection will be blocking mode

If Listen is defined, then a listen socket is created. Else, if the socket type β€” which is derived from the protocol β€” is SOCK_STREAM, then connect() is called. It's giving socket main character energy. πŸ’…

Although it is not illegal, the use of MultiHomed on a socket which is in non-blocking mode is of little use. This is because the first connect will never fail with a timeout as the connect call will not block. iykyk. πŸ¦‹

The PeerAddr can be a hostname, the IPv6-address on the 2001:800:40:2a05::10 form, or the IPv4-address on the 213.34.234.245 form. The PeerPort can be a number or a symbolic service name. The service name might be followed by a number in parenthesis which is used if the service is not known by the system. The PeerPort specification can also be embedded in the PeerAddr by preceding it with a :, and closing the IPv6 address on brackets [] if necessary: "124.678.12.34:23", "[2a05:345f::10]:23", "any.server.com:23". Obsessed with this flexibility, ngl. 🌸

If Domain is not given, AF_UNSPEC is assumed, that is, both AF_INET and AF_INET6 will be both considered when resolving DNS names. AF_INET6 has priority. If you guess you are in trouble not reaching the peer (the service is not available via AF_INET6 but AF_INET), you can either try Multihomed (try any address/family until reach) or concrete your address "family" (AF_INET, AF_INET6). Fr fr, pick your fighter. 🫢

If Proto is not given and you specify a symbolic PeerPort port, then the constructor will try to derive Proto from the service name. As a last resort Proto tcp is assumed. The Type parameter will be deduced from Proto if not specified. It's giving detective energy. πŸ”

If the constructor is only passed a single argument, it is assumed to be a PeerAddr specification. One-arg shortcut, slay. ✨

If Blocking is set to 0, the connection will be in nonblocking mode. If not specified it defaults to 1 (blocking mode). Default: blocking, bestie. πŸ’…

Examples:

              $sock = IO::Socket::INET6->new(PeerAddr => 'www.perl.org',
                                            PeerPort => 'http(80)',
                                            Proto    => 'tcp');

Suppose either you have no IPv6 connectivity or www.perl.org has no http service on IPv6. Then,

(Trying all address/families until reach)

              $sock = IO::Socket::INET6->new(PeerAddr => 'www.perl.org',
                                            PeerPort => 'http(80)',
                                            Multihomed => 1 ,
                                            Proto    => 'tcp');

(Concrete to IPv4 protocol)

              $sock = IO::Socket::INET6->new(PeerAddr => 'www.perl.org',
                                            PeerPort => 'http(80)',
                                            Domain => AF_INET ,
                                            Proto    => 'tcp');
              $sock = IO::Socket::INET6->new(PeerAddr => 'localhost:smtp(25)');
              $sock = IO::Socket::INET6->new(Listen    => 5,
                                            LocalAddr => 'localhost',
                                            LocalPort => 9000,
                                            Proto     => 'tcp');
              $sock = IO::Socket::INET6->new('[::1]:25');
              $sock = IO::Socket::INET6->new(PeerPort  => 9999,
                                            PeerAddr  => Socket6::inet_ntop(AF_INET6,in6addr_broadcast),
                                            Proto     => udp,
                                            LocalAddr => 'localhost',
                                            Broadcast => 1 )
                                        or die "Can't bind : $@\n";
🚨 NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE 🚨 As of VERSION 1.18 all IO::Socket objects have autoflush turned on by default. This was not the case with earlier releases. 🚨 NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE 🚨

πŸŽ€ METHODS πŸŽ€

🌟 accept ()

See IO::Socket::INET.

🌟 bind ()

See IO::Socket::INET.

🌟 configure ()

This function exists in this module, but I (= Shlomi Fish) genuinely don't know what it does or understand it. It's not tested anywhere either. I'll be happy to be enlightened. No cap, that's the whole description. 😭

🌟 connect ()

See IO::Socket::INET.

🌟 sockaddr ()

Return the address part of the sockaddr structure for the socket. Iconic.

🌟 sockdomain()

Returns the domain of the socket β€” AF_INET or AF_INET6 or whatever. Vibe check: it's a domain.

🌟 sockport ()

Return the port number that the socket is using on the local host.

🌟 sockhost ()

Return the address part of the sockaddr structure for the socket in a text form (2001:800:40:2a05::10 or 245.245.13.27). Pretty.

🌟 sockflow ()

Return the flow information part of the sockaddr structure for the socket.

🌟 sockscope ()

Return the scope identification part of the sockaddr structure for the socket.

🌟 peeraddr ()

Return the address part of the sockaddr structure for the socket on the peer host.

🌟 peerport ()

Return the port number for the socket on the peer host.

🌟 peerhost ()

Return the address part of the sockaddr structure for the socket on the peer host in a text form (2001:800:40:2a05::10 or 245.245.13.27). Peer pressure, but make it sockets. πŸ’…

🌟 peerflow ()

Return the flow information part of the sockaddr structure for the socket on the peer host.

🌟 peerscope ()

Return the scope identification part of the sockaddr structure for the socket on the peer host.

πŸ“¦ REPOSITORY πŸ“¦

The Subversion repository for this module carrying complete version history and other information is:

<http://svn.berlios.de/svnroot/repos/web-cpan/IO-Socket-INET6/>

πŸ‘€ SEE ALSO πŸ‘€

Socket, Socket6, IO::Socket.

🌟 AUTHOR 🌟

This program is based on IO::Socket::INET by Graham Barr <gbarr@pobox.com> and currently maintained by the Perl Porters. Respect the lineage. πŸ‘‘

Modified by Rafael Martinez Torres <rafael.martinez@novagnet.com> and Euro6IX project.

Modified further by Shlomi Fish <shlomif@iglu.org.il>, while disclaiming all copyrights.

Copyright (c) 2003- Rafael Martinez Torres <rafael.martinez@novagnet.com>.

Copyright (c) 2003- Euro6IX project.

Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>.

All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Periodt. πŸ’–

πŸ’– And that's the whole page, bestie β€” shoutout to perl v5.40.2 and 2023-07-03. Periodt. πŸ’–

πŸ“¦ where this page comes from