# Copyright (c) 2023 Yuki Kimoto
# MIT License
class Sys::Socket::Sockaddr : pointer {
version_from Sys;
use Sys::Socket::Constant as SOCKET;
use Sys::Socket::Sockaddr::In;
use Sys::Socket::Sockaddr::In6;
use Sys::Socket::Sockaddr::Un;
# Interfaces
interface Cloneable;
# Class methods
native static method new : Sys::Socket::Sockaddr ();
static method new_with_family : Sys::Socket::Sockaddr ($family : int) {
my $addr = (Sys::Socket::Sockaddr)undef;
if ($family == SOCKET->AF_INET) {
$addr = Sys::Socket::Sockaddr::In->new;
}
elsif ($family == SOCKET->AF_INET6) {
$addr = Sys::Socket::Sockaddr::In6->new;
}
elsif ($family == SOCKET->AF_UNIX) {
$addr = Sys::Socket::Sockaddr::Un->new;
}
else {
die "The address family $family is not available.";
}
return $addr;
}
# Instance methods
native method DESTROY : void ();
native method sa_family : int ();
native method set_sa_family : void ($family : int);
method size : int () { die "Not implemented."; }
method clone : Sys::Socket::Sockaddr () { die "Not implemented."; }
native method upgrade : Sys::Socket::Sockaddr ();
}