27 #include <system_error>
33 namespace libwire::internal_ {
38 #if defined(LIBWIRE_POSIX)
39 using native_handle_t = int;
41 #if defined(LIBWIRE_WINDOWS)
42 using native_handle_t =
unsigned long long;
46 static unsigned max_pending_connections;
54 #if defined(LIBWIRE_POSIX)
55 static constexpr native_handle_t not_initialized = -1;
57 #if defined(LIBWIRE_WINDOWS)
58 static constexpr native_handle_t not_initialized = ~0;
65 socket() noexcept = default;
67 explicit socket(native_handle_t fd) : handle(fd) {
76 socket(
const socket&) =
delete;
77 socket(socket&&) noexcept;
78 socket& operator=(const socket&) = delete;
79 socket& operator=(socket&&) noexcept;
88 native_handle_t native_handle() const noexcept;
94 void connect(endpoint target, std::error_code& ec) noexcept;
99 void shutdown(
bool read = true,
bool write = true) noexcept;
105 void bind(endpoint target, std::error_code& ec) noexcept;
113 void listen(
int backlog, std::error_code& ec) noexcept;
119 socket accept(std::error_code& ec) noexcept;
125 size_t write(const
void* input,
size_t length_bytes, std::error_code& ec) noexcept;
131 size_t read(
void* output,
size_t length_bytes, std::error_code& ec) noexcept;
137 void disassociate() noexcept;
142 size_t sendto(const
void* input,
size_t length_bytes, endpoint dest, std::error_code& ec) noexcept;
147 size_t recvfrom(
void* output,
size_t length_bytes, endpoint& source, std::error_code& ec) noexcept;
152 operator
bool() const noexcept;
154 endpoint local_endpoint() const noexcept;
156 endpoint remote_endpoint() const noexcept;
158 native_handle_t handle = not_initialized;
162 bool user_non_blocking : 1;
This file defines universal address structure for both IPv4 and IPv6 network addresses.
Cannot send after transport endpoint shutdown.