class Sys::Socket::Sockaddr::In extends Sys::Socket::Sockaddr : pointer_t {
  use Sys::Socket::In_addr;
  
  # Class methods
  native static method new : Sys::Socket::Sockaddr::In ();
  
  # Instance methods
  native method DESTROY : void ();

  method sa_family : int () {
    my $sin_family = $self->sin_family;
    return $sin_family;
  }
  
  native method sin_family : int ();
  
  native method set_sin_family : void ($family : int);
  
  native method copy_sin_addr : Sys::Socket::In_addr ();
  
  native method set_sin_addr : void ($address : Sys::Socket::In_addr);
  
  native method sin_port : int ();
  
  native method set_sin_port : void ($port : int);

  native method sizeof : int ();
  
  method clone : Sys::Socket::Sockaddr::In () {
    my $clone = Sys::Socket::Sockaddr::In->new;

    $clone->set_sin_family($self->sin_family);
    $clone->set_sin_addr($self->copy_sin_addr);
    $clone->set_sin_port($self->sin_port);

    return $clone;
  }
}