diff --git a/src/epoll-socket.c b/src/epoll-socket.c index 072374b..5a4da06 100644 --- a/src/epoll-socket.c +++ b/src/epoll-socket.c @@ -145,6 +145,14 @@ void ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info) { _ep_sock_maybe_free(sock_private); } +void ep_sock_force_delete(ep_port_t* port_info, ep_sock_t* sock_info) { + _ep_sock_private_t* sock_private = _ep_sock_private(sock_info); + if (sock_private->latest_poll_req != NULL) + poll_req_delete(port_info, sock_info, sock_private->latest_poll_req); + assert(sock_private->poll_req_count == 0); + ep_sock_delete(port_info, sock_info); +} + ep_sock_t* ep_sock_find(tree_t* tree, SOCKET socket) { tree_node_t* tree_node = tree_find(tree, socket); if (tree_node == NULL) diff --git a/src/epoll-socket.h b/src/epoll-socket.h index df4a061..d554d10 100644 --- a/src/epoll-socket.h +++ b/src/epoll-socket.h @@ -21,6 +21,8 @@ typedef struct ep_sock { EPOLL_INTERNAL ep_sock_t* ep_sock_new(ep_port_t* port_info, SOCKET socket); EPOLL_INTERNAL void ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info); +EPOLL_INTERNAL void ep_sock_force_delete(ep_port_t* port_info, + ep_sock_t* sock_info); EPOLL_INTERNAL ep_sock_t* ep_sock_find(tree_t* tree, SOCKET socket);