7#include "network_event.hpp"
8#include "../assert.hpp"
16namespace hi::inline v1 {
18[[nodiscard]]
constexpr network_event network_event_from_win32(
long rhs)
noexcept
20 auto r = network_event::none;
22 r |= (rhs & FD_READ) ? network_event::read : network_event::none;
23 r |= (rhs & FD_WRITE) ? network_event::write : network_event::none;
24 r |= (rhs & FD_CLOSE) ? network_event::close : network_event::none;
25 r |= (rhs & FD_CONNECT) ? network_event::connect : network_event::none;
26 r |= (rhs & FD_ACCEPT) ? network_event::accept : network_event::none;
27 r |= (rhs & FD_OOB) ? network_event::out_of_band : network_event::none;
28 r |= (rhs & FD_QOS) ? network_event::qos : network_event::none;
29 r |= (rhs & FD_GROUP_QOS) ? network_event::group_qos : network_event::none;
30 r |= (rhs & FD_ADDRESS_LIST_CHANGE) ? network_event::address_list_change : network_event::none;
31 r |= (rhs & FD_ROUTING_INTERFACE_CHANGE) ? network_event::routing_interface_changed : network_event::none;
36[[nodiscard]]
constexpr network_error network_error_from_win32(
int rhs)
noexcept
39 case 0:
return network_error::success;
40 case WSAEAFNOSUPPORT:
return network_error::af_not_supported;
41 case WSAECONNREFUSED:
return network_error::connection_refused;
42 case WSAENETUNREACH:
return network_error::network_unreachable;
43 case WSAENOBUFS:
return network_error::no_buffers;
44 case WSAETIMEDOUT:
return network_error::timeout;
45 case WSAENETDOWN:
return network_error::network_down;
46 case WSAECONNRESET:
return network_error::connection_reset;
47 case WSAECONNABORTED:
return network_error::connection_aborted;
48 default: hi_no_default();
52[[nodiscard]]
constexpr network_events network_events_from_win32(WSANETWORKEVENTS
const& rhs)
noexcept
54 auto r = network_events{};
55 r.events = network_event_from_win32(rhs.lNetworkEvents);
56 r.errors[bit(network_event::read)] = network_error_from_win32(rhs.iErrorCode[FD_READ_BIT]);
57 r.errors[bit(network_event::write)] = network_error_from_win32(rhs.iErrorCode[FD_WRITE_BIT]);
58 r.errors[bit(network_event::close)] = network_error_from_win32(rhs.iErrorCode[FD_CLOSE_BIT]);
59 r.errors[bit(network_event::connect)] = network_error_from_win32(rhs.iErrorCode[FD_CONNECT_BIT]);
60 r.errors[bit(network_event::accept)] = network_error_from_win32(rhs.iErrorCode[FD_ACCEPT_BIT]);
61 r.errors[bit(network_event::out_of_band)] = network_error_from_win32(rhs.iErrorCode[FD_OOB_BIT]);
62 r.errors[bit(network_event::qos)] = network_error_from_win32(rhs.iErrorCode[FD_QOS_BIT]);
63 r.errors[bit(network_event::group_qos)] = network_error_from_win32(rhs.iErrorCode[FD_GROUP_QOS_BIT]);
64 r.errors[bit(network_event::address_list_change)] = network_error_from_win32(rhs.iErrorCode[FD_ADDRESS_LIST_CHANGE_BIT]);
65 r.errors[bit(network_event::routing_interface_changed)] =
66 network_error_from_win32(rhs.iErrorCode[FD_ROUTING_INTERFACE_CHANGE_BIT]);