RELEASE_ASSERT(ss_len == 0 || static_cast<unsigned int>(ss_len) >= sizeof(sa_family_t), "");
RELEASE_ASSERT(ss_len == 0 || static_cast<unsigned int>(ss_len) == sizeof(sockaddr_in), "");
RELEASE_ASSERT(ss_len == 0 || static_cast<unsigned int>(ss_len) == sizeof(sockaddr_in6), "");
return absl::InvalidArgumentError(fmt::format("Unexpected sockaddr family: {}", ss.ss_family));
addressFromSockAddrOrDie(const sockaddr_storage& ss, socklen_t ss_len, os_fd_t fd, bool v6only) {
static constexpr size_t BufferSize = 16; // enough space to hold an IPv4 address in string form
static const bool supported = SocketInterfaceSingleton::get().ipFamilySupported(AF_INET);
// Based on benchmark testing, this reserve+append implementation runs faster than absl::StrCat.
auto addr = Address::InstanceFactory::createInstancePtr<Address::Ipv6Instance>(ret_addr, v6only_);
static const bool supported = SocketInterfaceSingleton::get().ipFamilySupported(AF_INET6);
// characters of pipe_path to sun_path, including null bytes in the name. The pathname must also
memcpy(&pipe_.address_.sun_path[0], pipe_path.data(), pipe_path.size()); // NOLINT(safe-memcpy)
RELEASE_ASSERT(static_cast<unsigned int>(ss_len) >= offsetof(struct sockaddr_un, sun_path) + 1,
bool PipeInstance::operator==(const Instance& rhs) const { return asString() == rhs.asString(); }