pack_sockaddr_in6#

Build a packed sockaddr_in6 from a port, a 16-byte IPv6 address, and optional scope and flow-info fields.

Synopsis#

my $sin6 = pack_sockaddr_in6($port, $packed_ipv6);
my $sin6 = pack_sockaddr_in6($port, $packed_ipv6, $scope_id, $flowinfo);

What you get back#

A fixed-size byte string matching the platform’s struct sockaddr_in6, ready for bind or connect.

Examples#

my $addr = inet_pton(AF_INET6, "::1");
my $sin6 = pack_sockaddr_in6(443, $addr);
connect($sock, $sin6) or die $!;
# Link-local address with scope index for eth0.
my $scope = scalar getsockopt(...);   # or from if_nametoindex
my $sin6  = pack_sockaddr_in6(5353, inet_pton(AF_INET6, "fe80::1"), $scope);

Edge cases#

  • $scope_id and $flowinfo default to 0 when omitted.

  • An address of any length but 16 croaks “Bad arg length”; undef croaks “Undefined address”.

  • Port and flow-info are truncated to 16 and 32 bits respectively; a port above 65535 warns “Port number above 0xFFFF”.

See also#

  • unpack_sockaddr_in6 - reverse direction.

  • sockaddr_in6 - dual-mode shortcut: packs in scalar context, unpacks in list context (a Perl sub in Socket.pm).

  • pack_sockaddr_in - IPv4 counterpart.

  • inet_pton - usual source of the address argument.