|
#define | _WIN32_WINNT 0x0600 |
|
#define | AFD_POLL_ABORT 0x0010 |
|
#define | AFD_POLL_ACCEPT 0x0080 |
|
#define | AFD_POLL_CONNECT_FAIL 0x0100 |
|
#define | AFD_POLL_DISCONNECT 0x0008 |
|
#define | AFD_POLL_LOCAL_CLOSE 0x0020 |
|
#define | AFD_POLL_RECEIVE 0x0001 |
|
#define | AFD_POLL_RECEIVE_EXPEDITED 0x0002 |
|
#define | AFD_POLL_SEND 0x0004 |
|
#define | array_count(a) (sizeof(a) / (sizeof((a)[0]))) |
|
#define | container_of(ptr, type, member) ((type*) ((uintptr_t) (ptr) - offsetof(type, member))) |
|
#define | EPOLL_CTL_ADD 1 |
|
#define | EPOLL_CTL_DEL 3 |
|
#define | EPOLL_CTL_MOD 2 |
|
#define | EPOLLERR (1U << 3) |
|
#define | EPOLLHUP (1U << 4) |
|
#define | EPOLLIN (1U << 0) |
|
#define | EPOLLMSG (1U << 10) |
|
#define | EPOLLONESHOT (1U << 31) |
|
#define | EPOLLOUT (1U << 2) |
|
#define | EPOLLPRI (1U << 1) |
|
#define | EPOLLRDBAND (1U << 7) |
|
#define | EPOLLRDHUP (1U << 13) |
|
#define | EPOLLRDNORM (1U << 6) |
|
#define | EPOLLWRBAND (1U << 9) |
|
#define | EPOLLWRNORM (1U << 8) |
|
#define | ERR__ERRNO_MAPPINGS(X) |
|
#define | FILE_OPEN 0x00000001UL |
|
#define | IOCTL_AFD_POLL 0x00012024 |
|
#define | KEYEDEVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | KEYEDEVENT_WAIT | KEYEDEVENT_WAKE) |
|
#define | KEYEDEVENT_WAIT 0x00000001UL |
|
#define | KEYEDEVENT_WAKE 0x00000002UL |
|
#define | NT_NTDLL_IMPORT_LIST(X) |
|
#define | NT_SUCCESS(status) (((NTSTATUS)(status)) >= 0) |
|
#define | POLL_GROUP__MAX_GROUP_SIZE 32 |
|
#define | PORT__MAX_ON_STACK_COMPLETIONS 256 |
|
#define | REFLOCK__DESTROY ((long) 0x10000000UL) |
|
#define | REFLOCK__DESTROY_MASK ((long) 0xf0000000UL) |
|
#define | REFLOCK__POISON ((long) 0x300dead0UL) |
|
#define | REFLOCK__REF ((long) 0x00000001UL) |
|
#define | REFLOCK__REF_MASK ((long) 0x0fffffffUL) |
|
#define | return_map_error(value) |
|
#define | return_set_error(value, error) |
|
#define | RTL_CONSTANT_OBJECT_ATTRIBUTES(ObjectName, Attributes) { sizeof(OBJECT_ATTRIBUTES), NULL, ObjectName, Attributes, NULL, NULL } |
|
#define | RTL_CONSTANT_STRING(s) { sizeof(s) - sizeof((s)[0]), sizeof(s), s } |
|
#define | SIO_BASE_HANDLE 0x48000022 |
|
#define | SIO_BSP_HANDLE_POLL 0x4800001D |
|
#define | SOCK__KNOWN_EPOLL_EVENTS |
|
#define | STATUS_CANCELLED ((NTSTATUS) 0xC0000120L) |
|
#define | STATUS_NOT_FOUND ((NTSTATUS) 0xC0000225L) |
|
#define | STATUS_PENDING ((NTSTATUS) 0x00000103L) |
|
#define | STATUS_SUCCESS ((NTSTATUS) 0x00000000L) |
|
#define | TREE__INSERT_OR_DESCEND(side) |
|
#define | TREE__REBALANCE_AFTER_INSERT(cis, trans) |
|
#define | TREE__REBALANCE_AFTER_REMOVE(cis, trans) |
|
#define | TREE__ROTATE(cis, trans) |
|
#define | unused_var(v) ((void) (v)) |
|
#define | WEPOLL_EXPORT |
|
#define | WEPOLL_INTERNAL static |
|
#define | WEPOLL_INTERNAL_EXTERN static |
|
#define | WIN32_LEAN_AND_MEAN |
|
#define | X(error_sym, errno_sym) |
|
#define | X(return_type, attributes, name, parameters) WEPOLL_INTERNAL_EXTERN return_type(attributes* name) parameters; |
|
#define | X(return_type, attributes, name, parameters) WEPOLL_INTERNAL return_type(attributes* name) parameters = NULL; |
|
#define | X(return_type, attributes, name, parameters) |
|
|
enum | EPOLL_EVENTS {
EPOLLIN = (int) (1U << 0),
EPOLLPRI = (int) (1U << 1),
EPOLLOUT = (int) (1U << 2),
EPOLLERR = (int) (1U << 3),
EPOLLHUP = (int) (1U << 4),
EPOLLRDNORM = (int) (1U << 6),
EPOLLRDBAND = (int) (1U << 7),
EPOLLWRNORM = (int) (1U << 8),
EPOLLWRBAND = (int) (1U << 9),
EPOLLMSG = (int) (1U << 10),
EPOLLRDHUP = (int) (1U << 13),
EPOLLONESHOT = (int) (1U << 31),
EPOLLIN = (int) (1U << 0),
EPOLLPRI = (int) (1U << 1),
EPOLLOUT = (int) (1U << 2),
EPOLLERR = (int) (1U << 3),
EPOLLHUP = (int) (1U << 4),
EPOLLRDNORM = (int) (1U << 6),
EPOLLRDBAND = (int) (1U << 7),
EPOLLWRNORM = (int) (1U << 8),
EPOLLWRBAND = (int) (1U << 9),
EPOLLMSG = (int) (1U << 10),
EPOLLRDHUP = (int) (1U << 13),
EPOLLONESHOT = (int) (1U << 31)
} |
|
enum | sock__poll_status { SOCK__POLL_IDLE = 0,
SOCK__POLL_PENDING,
SOCK__POLL_CANCELLED
} |
|
|
WEPOLL_INTERNAL int | afd_cancel_poll (HANDLE afd_device_handle, IO_STATUS_BLOCK *io_status_block) |
|
WEPOLL_INTERNAL int | afd_create_device_handle (HANDLE iocp_handle, HANDLE *afd_device_handle_out) |
|
WEPOLL_INTERNAL int | afd_poll (HANDLE afd_device_handle, AFD_POLL_INFO *poll_info, IO_STATUS_BLOCK *io_status_block) |
|
static HANDLE | epoll__create (void) |
|
WEPOLL_EXPORT int | epoll_close (HANDLE ephnd) |
|
WEPOLL_EXPORT HANDLE | epoll_create (int size) |
|
WEPOLL_EXPORT HANDLE | epoll_create1 (int flags) |
|
WEPOLL_EXPORT int | epoll_ctl (HANDLE ephnd, int op, SOCKET sock, struct epoll_event *event) |
|
WEPOLL_INTERNAL int | epoll_global_init (void) |
|
WEPOLL_EXPORT int | epoll_wait (HANDLE ephnd, struct epoll_event *events, int maxevents, int timeout) |
|
static errno_t | err__map_win_error_to_errno (DWORD error) |
|
WEPOLL_INTERNAL int | err_check_handle (HANDLE handle) |
|
WEPOLL_INTERNAL void | err_map_win_error (void) |
|
WEPOLL_INTERNAL void | err_set_win_error (DWORD error) |
|
WEPOLL_INTERNAL int | init (void) |
|
static BOOL CALLBACK | init__once_callback (INIT_ONCE *once, void *parameter, void **context) |
|
WEPOLL_INTERNAL int | nt_global_init (void) |
|
static poll_group_t * | poll_group__new (port_state_t *port_state) |
|
WEPOLL_INTERNAL poll_group_t * | poll_group_acquire (port_state_t *port) |
|
WEPOLL_INTERNAL void | poll_group_delete (poll_group_t *poll_group) |
|
WEPOLL_INTERNAL poll_group_t * | poll_group_from_queue_node (queue_node_t *queue_node) |
|
WEPOLL_INTERNAL HANDLE | poll_group_get_afd_device_handle (poll_group_t *poll_group) |
|
WEPOLL_INTERNAL void | poll_group_release (poll_group_t *poll_group) |
|
static port_state_t * | port__alloc (void) |
|
static int | port__close_iocp (port_state_t *port_state) |
|
static HANDLE | port__create_iocp (void) |
|
static int | port__ctl_add (port_state_t *port_state, SOCKET sock, struct epoll_event *ev) |
|
static int | port__ctl_del (port_state_t *port_state, SOCKET sock) |
|
static int | port__ctl_mod (port_state_t *port_state, SOCKET sock, struct epoll_event *ev) |
|
static int | port__ctl_op (port_state_t *port_state, int op, SOCKET sock, struct epoll_event *ev) |
|
static int | port__feed_events (port_state_t *port_state, struct epoll_event *epoll_events, OVERLAPPED_ENTRY *iocp_events, DWORD iocp_event_count) |
|
static void | port__free (port_state_t *port) |
|
static int | port__poll (port_state_t *port_state, struct epoll_event *epoll_events, OVERLAPPED_ENTRY *iocp_events, DWORD maxevents, DWORD timeout) |
|
static int | port__update_events (port_state_t *port_state) |
|
static void | port__update_events_if_polling (port_state_t *port_state) |
|
WEPOLL_INTERNAL void | port_add_deleted_socket (port_state_t *port_state, sock_state_t *sock_state) |
|
WEPOLL_INTERNAL void | port_cancel_socket_update (port_state_t *port_state, sock_state_t *sock_state) |
|
WEPOLL_INTERNAL int | port_close (port_state_t *port_state) |
|
WEPOLL_INTERNAL int | port_ctl (port_state_t *port_state, int op, SOCKET sock, struct epoll_event *ev) |
|
WEPOLL_INTERNAL int | port_delete (port_state_t *port_state) |
|
WEPOLL_INTERNAL sock_state_t * | port_find_socket (port_state_t *port_state, SOCKET socket) |
|
WEPOLL_INTERNAL HANDLE | port_get_iocp_handle (port_state_t *port_state) |
|
WEPOLL_INTERNAL queue_t * | port_get_poll_group_queue (port_state_t *port_state) |
|
WEPOLL_INTERNAL port_state_t * | port_new (HANDLE *iocp_handle_out) |
|
WEPOLL_INTERNAL int | port_register_socket (port_state_t *port_state, sock_state_t *sock_state, SOCKET socket) |
|
WEPOLL_INTERNAL void | port_remove_deleted_socket (port_state_t *port_state, sock_state_t *sock_state) |
|
WEPOLL_INTERNAL void | port_request_socket_update (port_state_t *port_state, sock_state_t *sock_state) |
|
WEPOLL_INTERNAL port_state_t * | port_state_from_handle_tree_node (ts_tree_node_t *tree_node) |
|
WEPOLL_INTERNAL ts_tree_node_t * | port_state_to_handle_tree_node (port_state_t *port_state) |
|
WEPOLL_INTERNAL void | port_unregister_socket (port_state_t *port_state, sock_state_t *sock_state) |
|
WEPOLL_INTERNAL int | port_wait (port_state_t *port_state, struct epoll_event *events, int maxevents, int timeout) |
|
static void | queue__detach_node (queue_node_t *node) |
|
WEPOLL_INTERNAL void | queue_append (queue_t *queue, queue_node_t *node) |
|
WEPOLL_INTERNAL queue_node_t * | queue_first (const queue_t *queue) |
|
WEPOLL_INTERNAL void | queue_init (queue_t *queue) |
|
WEPOLL_INTERNAL bool | queue_is_empty (const queue_t *queue) |
|
WEPOLL_INTERNAL bool | queue_is_enqueued (const queue_node_t *node) |
|
WEPOLL_INTERNAL queue_node_t * | queue_last (const queue_t *queue) |
|
WEPOLL_INTERNAL void | queue_move_to_end (queue_t *queue, queue_node_t *node) |
|
WEPOLL_INTERNAL void | queue_move_to_start (queue_t *queue, queue_node_t *node) |
|
WEPOLL_INTERNAL void | queue_node_init (queue_node_t *node) |
|
WEPOLL_INTERNAL void | queue_prepend (queue_t *queue, queue_node_t *node) |
|
WEPOLL_INTERNAL void | queue_remove (queue_node_t *node) |
|
static void | reflock__await_event (void *address) |
|
static void | reflock__signal_event (void *address) |
|
WEPOLL_INTERNAL int | reflock_global_init (void) |
|
WEPOLL_INTERNAL void | reflock_init (reflock_t *reflock) |
|
WEPOLL_INTERNAL void | reflock_ref (reflock_t *reflock) |
|
WEPOLL_INTERNAL void | reflock_unref (reflock_t *reflock) |
|
WEPOLL_INTERNAL void | reflock_unref_and_destroy (reflock_t *reflock) |
|
static uint32_t | sock__afd_events_to_epoll_events (DWORD afd_events) |
|
static sock_state_t * | sock__alloc (void) |
|
static int | sock__cancel_poll (sock_state_t *sock_state) |
|
static int | sock__delete (port_state_t *port_state, sock_state_t *sock_state, bool force) |
|
static DWORD | sock__epoll_events_to_afd_events (uint32_t epoll_events) |
|
static void | sock__free (sock_state_t *sock_state) |
|
WEPOLL_INTERNAL void | sock_delete (port_state_t *port_state, sock_state_t *sock_state) |
|
WEPOLL_INTERNAL int | sock_feed_event (port_state_t *port_state, IO_STATUS_BLOCK *io_status_block, struct epoll_event *ev) |
|
WEPOLL_INTERNAL void | sock_force_delete (port_state_t *port_state, sock_state_t *sock_state) |
|
WEPOLL_INTERNAL sock_state_t * | sock_new (port_state_t *port_state, SOCKET socket) |
|
WEPOLL_INTERNAL int | sock_set_event (port_state_t *port_state, sock_state_t *sock_state, const struct epoll_event *ev) |
|
WEPOLL_INTERNAL sock_state_t * | sock_state_from_queue_node (queue_node_t *queue_node) |
|
WEPOLL_INTERNAL sock_state_t * | sock_state_from_tree_node (tree_node_t *tree_node) |
|
WEPOLL_INTERNAL queue_node_t * | sock_state_to_queue_node (sock_state_t *sock_state) |
|
WEPOLL_INTERNAL tree_node_t * | sock_state_to_tree_node (sock_state_t *sock_state) |
|
WEPOLL_INTERNAL int | sock_update (port_state_t *port_state, sock_state_t *sock_state) |
|
static void | tree__rotate_left (tree_t *tree, tree_node_t *node) |
|
static void | tree__rotate_right (tree_t *tree, tree_node_t *node) |
|
WEPOLL_INTERNAL int | tree_add (tree_t *tree, tree_node_t *node, uintptr_t key) |
|
WEPOLL_INTERNAL void | tree_del (tree_t *tree, tree_node_t *node) |
|
WEPOLL_INTERNAL tree_node_t * | tree_find (const tree_t *tree, uintptr_t key) |
|
WEPOLL_INTERNAL void | tree_init (tree_t *tree) |
|
WEPOLL_INTERNAL void | tree_node_init (tree_node_t *node) |
|
WEPOLL_INTERNAL tree_node_t * | tree_root (const tree_t *tree) |
|
static ts_tree_node_t * | ts_tree__find_node (ts_tree_t *ts_tree, uintptr_t key) |
|
WEPOLL_INTERNAL int | ts_tree_add (ts_tree_t *ts_tree, ts_tree_node_t *node, uintptr_t key) |
|
WEPOLL_INTERNAL ts_tree_node_t * | ts_tree_del_and_ref (ts_tree_t *ts_tree, uintptr_t key) |
|
WEPOLL_INTERNAL ts_tree_node_t * | ts_tree_find_and_ref (ts_tree_t *ts_tree, uintptr_t key) |
|
WEPOLL_INTERNAL void | ts_tree_init (ts_tree_t *rtl) |
|
WEPOLL_INTERNAL void | ts_tree_node_init (ts_tree_node_t *node) |
|
WEPOLL_INTERNAL void | ts_tree_node_unref (ts_tree_node_t *node) |
|
WEPOLL_INTERNAL void | ts_tree_node_unref_and_destroy (ts_tree_node_t *node) |
|
static SOCKET | ws__ioctl_get_bsp_socket (SOCKET socket, DWORD ioctl) |
|
WEPOLL_INTERNAL SOCKET | ws_get_base_socket (SOCKET socket) |
|
WEPOLL_INTERNAL int | ws_global_init (void) |
|