23 #include <sys/socket.h>
25 #include <netinet/ip.h>
26 #include <seastar/net/byteorder.hh>
27 #include <seastar/net/unix_address.hh>
44 socklen_t addr_length;
46 ::sockaddr_storage sas;
52 socket_address(
const sockaddr_in& sa) noexcept : addr_length{
sizeof(::sockaddr_in)} {
55 socket_address(
const sockaddr_in6& sa) noexcept : addr_length{
sizeof(::sockaddr_in6)} {
70 ::sockaddr& as_posix_sockaddr() noexcept {
return u.sa; }
71 ::sockaddr_in& as_posix_sockaddr_in() noexcept {
return u.in; }
72 ::sockaddr_in6& as_posix_sockaddr_in6() noexcept {
return u.in6; }
73 const ::sockaddr& as_posix_sockaddr() const noexcept {
return u.sa; }
74 const ::sockaddr_in& as_posix_sockaddr_in() const noexcept {
return u.in; }
75 const ::sockaddr_in6& as_posix_sockaddr_in6() const noexcept {
return u.in6; }
79 socklen_t length() const noexcept {
return addr_length; };
81 bool is_af_unix() const noexcept {
82 return u.sa.sa_family == AF_UNIX;
85 bool is_unspecified() const noexcept;
87 sa_family_t family() const noexcept {
88 return u.sa.sa_family;
91 net::inet_address addr() const noexcept;
92 ::in_port_t port() const noexcept;
93 bool is_wildcard() const noexcept;
101 std::ostream& operator<<(std::ostream&,
const socket_address&);
103 enum class transport {
113 ipv4_addr(uint32_t ip, uint16_t port) noexcept : ip(ip), port(port) {}
114 ipv4_addr(uint16_t port) noexcept : ip(0), port(port) {}
117 ipv4_addr(
const std::string &addr, uint16_t port);
121 ipv4_addr(const ::in_addr&, uint16_t = 0) noexcept;
123 bool is_ip_unspecified()
const noexcept {
126 bool is_port_unspecified()
const noexcept {
132 using ipv6_bytes = std::array<uint8_t, 16>;
137 ipv6_addr(
const ipv6_bytes&, uint16_t port = 0) noexcept;
141 ipv6_addr(
const std::string&, uint16_t port);
143 ipv6_addr(const ::in6_addr&, uint16_t = 0) noexcept;
144 ipv6_addr(const ::sockaddr_in6&) noexcept;
147 bool is_ip_unspecified()
const noexcept;
148 bool is_port_unspecified()
const noexcept {
153 std::ostream& operator<<(std::ostream&,
const ipv4_addr&);
154 std::ostream& operator<<(std::ostream&,
const ipv6_addr&);
157 return lhs.ip == rhs.ip && lhs.port == rhs.port;
176 struct hash<::sockaddr_un> {
177 size_t operator()(const ::sockaddr_un&)
const;
182 size_t operator()(seastar::transport tr)
const {
183 return static_cast<size_t>(tr);
189 #if FMT_VERSION >= 90000
190 template <>
struct fmt::formatter<
seastar::socket_address> : fmt::ostream_formatter {};
191 template <>
struct fmt::formatter<
seastar::ipv4_addr> : fmt::ostream_formatter {};
192 template <>
struct fmt::formatter<
seastar::ipv6_addr> : fmt::ostream_formatter {};
Definition: inet_address.hh:44
Definition: socket_defs.hh:42
union seastar::socket_address::@14 u
!< actual size of the relevant 'u' member
socket_address() noexcept
Seastar API namespace.
Definition: abort_on_ebadf.hh:24
Definition: socket_defs.hh:108
Definition: socket_defs.hh:131
Definition: unix_address.hh:40