sockaddr_family#

Read the address-family byte from any packed sockaddr without committing to one unpacking shape.

Synopsis#

my $family = sockaddr_family($sockaddr);

What you get back#

An integer equal to one of AF_INET, AF_INET6, AF_UNIX, etc., or undef if the input is shorter than 2 bytes.

Examples#

my $sa = getpeername($sock);
if (sockaddr_family($sa) == AF_INET6) {
    my ($port, $addr) = unpack_sockaddr_in6($sa);
    ...
} else {
    my ($port, $addr) = unpack_sockaddr_in($sa);
    ...
}

Edge cases#

  • The family byte is read in native byte order — this matches how every pack_sockaddr_* writes it.

  • Input shorter than 2 bytes returns undef.

Differences from upstream#

Fully compatible with upstream Socket.

See also#

  • unpack_sockaddr_in, unpack_sockaddr_in6, unpack_sockaddr_un — the right unpacker depends on the family returned here.