7#include "network_event.hpp"
10namespace hi::inline
v1 {
12[[nodiscard]]
constexpr network_event network_event_from_win32(
long rhs)
noexcept
14 auto r = network_event::none;
16 r |= (rhs & FD_READ) ? network_event::read : network_event::none;
17 r |= (rhs & FD_WRITE) ? network_event::write : network_event::none;
18 r |= (rhs & FD_CLOSE) ? network_event::close : network_event::none;
19 r |= (rhs & FD_CONNECT) ? network_event::connect : network_event::none;
20 r |= (rhs & FD_ACCEPT) ? network_event::accept : network_event::none;
21 r |= (rhs & FD_OOB) ? network_event::out_of_band : network_event::none;
22 r |= (rhs & FD_QOS) ? network_event::qos : network_event::none;
23 r |= (rhs & FD_GROUP_QOS) ? network_event::group_qos : network_event::none;
24 r |= (rhs & FD_ADDRESS_LIST_CHANGE) ? network_event::address_list_change : network_event::none;
25 r |= (rhs & FD_ROUTING_INTERFACE_CHANGE) ? network_event::routing_interface_changed : network_event::none;
30[[nodiscard]]
constexpr network_error network_error_from_win32(
int rhs)
noexcept
33 case 0:
return network_error::success;
34 case WSAEAFNOSUPPORT:
return network_error::af_not_supported;
35 case WSAECONNREFUSED:
return network_error::connection_refused;
36 case WSAENETUNREACH:
return network_error::network_unreachable;
37 case WSAENOBUFS:
return network_error::no_buffers;
38 case WSAETIMEDOUT:
return network_error::timeout;
39 case WSAENETDOWN:
return network_error::network_down;
40 case WSAECONNRESET:
return network_error::connection_reset;
41 case WSAECONNABORTED:
return network_error::connection_aborted;
46[[nodiscard]]
constexpr network_events network_events_from_win32(WSANETWORKEVENTS
const& rhs)
noexcept
48 auto r = network_events{};
49 r.events = network_event_from_win32(rhs.lNetworkEvents);
50 r.errors[
bit(network_event::read)] = network_error_from_win32(rhs.iErrorCode[FD_READ_BIT]);
51 r.errors[
bit(network_event::write)] = network_error_from_win32(rhs.iErrorCode[FD_WRITE_BIT]);
52 r.errors[
bit(network_event::close)] = network_error_from_win32(rhs.iErrorCode[FD_CLOSE_BIT]);
53 r.errors[
bit(network_event::connect)] = network_error_from_win32(rhs.iErrorCode[FD_CONNECT_BIT]);
54 r.errors[
bit(network_event::accept)] = network_error_from_win32(rhs.iErrorCode[FD_ACCEPT_BIT]);
55 r.errors[
bit(network_event::out_of_band)] = network_error_from_win32(rhs.iErrorCode[FD_OOB_BIT]);
56 r.errors[
bit(network_event::qos)] = network_error_from_win32(rhs.iErrorCode[FD_QOS_BIT]);
57 r.errors[
bit(network_event::group_qos)] = network_error_from_win32(rhs.iErrorCode[FD_GROUP_QOS_BIT]);
58 r.errors[
bit(network_event::address_list_change)] = network_error_from_win32(rhs.iErrorCode[FD_ADDRESS_LIST_CHANGE_BIT]);
59 r.errors[
bit(network_event::routing_interface_changed)] =
60 network_error_from_win32(rhs.iErrorCode[FD_ROUTING_INTERFACE_CHANGE_BIT]);
Utilities to assert and bound check.
#define hi_no_default()
This part of the code should not be reachable, unless a programming bug.
Definition assert.hpp:145
DOXYGEN BUG.
Definition algorithm.hpp:15
constexpr size_t bit(network_event const &rhs) noexcept
Get the bit index of the single bit of the network_event mask.
Definition network_event.hpp:52