function sockaddr_from_native_sockaddr()

in src/os/_Private/sockaddr_from_native_sockaddr.php [14:43]


function sockaddr_from_native_sockaddr(namespace\sockaddr $sa): OS\sockaddr {
  if ($sa is namespace\sockaddr_un_pathname) {
    return new OS\sockaddr_un($sa->sun_path);
  }
  if ($sa is namespace\sockaddr_un_unnamed) {
    return new OS\sockaddr_un(null);
  }

  if ($sa is namespace\sockaddr_in) {
    return new OS\sockaddr_in(
      $sa->sin_port,
      $sa->sin_addr,
    );
  }

  if ($sa is namespace\sockaddr_in6) {
    return new OS\sockaddr_in6(
      $sa->sin6_port,
      $sa->sin6_flowinfo,
      string_as_in6_addr_UNSAFE($sa->sin6_addr),
      $sa->sin6_scope_id,
    );
  }

  throw_errno(
    OS\Errno::EOPNOTSUPP,
    "Unhandled builtin sockaddr class %s",
    \get_class($sa),
  );
}