9#include "socket_event_intf.hpp"
10#include "../utility/utility.hpp"
11#include "../macros.hpp"
13hi_export_module(hikogui.dipatch.socket_event : impl);
17[[
nodiscard]]
constexpr socket_event socket_event_from_win32(
long rhs)
noexcept
19 auto r = socket_event::none;
21 r |= (rhs &
FD_READ) ? socket_event::read : socket_event::none;
22 r |= (rhs &
FD_WRITE) ? socket_event::write : socket_event::none;
23 r |= (rhs &
FD_CLOSE) ? socket_event::close : socket_event::none;
24 r |= (rhs &
FD_CONNECT) ? socket_event::connect : socket_event::none;
25 r |= (rhs &
FD_ACCEPT) ? socket_event::accept : socket_event::none;
26 r |= (rhs &
FD_OOB) ? socket_event::out_of_band : socket_event::none;
27 r |= (rhs &
FD_QOS) ? socket_event::qos : socket_event::none;
28 r |= (rhs &
FD_GROUP_QOS) ? socket_event::group_qos : socket_event::none;
35[[
nodiscard]]
constexpr socket_error socket_error_from_win32(
int rhs)
noexcept
38 case 0:
return socket_error::success;
42 case WSAENOBUFS:
return socket_error::no_buffers;
44 case WSAENETDOWN:
return socket_error::network_down;
47 default: hi_no_default();
53 auto r = socket_events{};
54 r.events = socket_event_from_win32(rhs.lNetworkEvents);
55 r.errors[
bit(socket_event::read)] = socket_error_from_win32(rhs.iErrorCode[
FD_READ_BIT]);
56 r.errors[
bit(socket_event::write)] = socket_error_from_win32(rhs.iErrorCode[
FD_WRITE_BIT]);
57 r.errors[
bit(socket_event::close)] = socket_error_from_win32(rhs.iErrorCode[
FD_CLOSE_BIT]);
58 r.errors[
bit(socket_event::connect)] = socket_error_from_win32(rhs.iErrorCode[
FD_CONNECT_BIT]);
59 r.errors[
bit(socket_event::accept)] = socket_error_from_win32(rhs.iErrorCode[
FD_ACCEPT_BIT]);
60 r.errors[
bit(socket_event::out_of_band)] = socket_error_from_win32(rhs.iErrorCode[
FD_OOB_BIT]);
61 r.errors[
bit(socket_event::qos)] = socket_error_from_win32(rhs.iErrorCode[
FD_QOS_BIT]);
62 r.errors[
bit(socket_event::group_qos)] = socket_error_from_win32(rhs.iErrorCode[
FD_GROUP_QOS_BIT]);
64 r.errors[
bit(socket_event::routing_interface_changed)] =
Rules for working with win32 headers.
DOXYGEN BUG.
Definition algorithm.hpp:16
constexpr size_t bit(socket_event const &rhs) noexcept
Get the bit index of the single bit of the socket_event mask.
Definition socket_event_intf.hpp:54
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377