socket: refactor lookup logic
This commit is contained in:
parent
d90f0d2d71
commit
eff08efcb8
@ -88,6 +88,14 @@ int ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ep_sock_t* ep_sock_find(tree_t* tree, SOCKET socket) {
|
||||
tree_node_t* tree_node = tree_find(tree, socket);
|
||||
if (tree_node == NULL)
|
||||
return NULL;
|
||||
|
||||
return container_of(tree, ep_sock_t, tree_node);
|
||||
}
|
||||
|
||||
void ep_sock_register_poll_req(ep_port_t* port_info, ep_sock_t* sock_info) {
|
||||
_ep_sock_private_t* sock_private = _ep_sock_private(sock_info);
|
||||
|
||||
@ -302,8 +310,3 @@ int ep_sock_feed_event(ep_port_t* port_info,
|
||||
|
||||
return ev_count;
|
||||
}
|
||||
|
||||
ep_sock_t* ep_sock_from_tree_node(tree_node_t* tree_node) {
|
||||
assert(tree_node != NULL);
|
||||
return container_of(tree_node, ep_sock_t, tree_node);
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@ typedef struct ep_sock {
|
||||
|
||||
EPOLL_INTERNAL ep_sock_t* ep_sock_new(ep_port_t* port_info);
|
||||
EPOLL_INTERNAL int ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info);
|
||||
EPOLL_INTERNAL ep_sock_t* ep_sock_find(tree_t* tree, SOCKET socket);
|
||||
|
||||
EPOLL_INTERNAL int ep_sock_set_socket(ep_port_t* port_info,
|
||||
ep_sock_t* sock_info,
|
||||
@ -39,6 +40,4 @@ EPOLL_INTERNAL void ep_sock_register_poll_req(ep_port_t* port_info,
|
||||
EPOLL_INTERNAL void ep_sock_unregister_poll_req(ep_port_t* port_info,
|
||||
ep_sock_t* sock_info);
|
||||
|
||||
EPOLL_INTERNAL ep_sock_t* ep_sock_from_tree_node(tree_node_t* tree_node);
|
||||
|
||||
#endif /* EPOLL_SOCK_DATA_H_ */
|
||||
|
||||
20
src/epoll.c
20
src/epoll.c
@ -49,15 +49,10 @@ static int _ep_ctl_add(ep_port_t* port_info,
|
||||
static int _ep_ctl_mod(ep_port_t* port_info,
|
||||
uintptr_t socket,
|
||||
struct epoll_event* ev) {
|
||||
tree_node_t* tree_node;
|
||||
ep_sock_t* sock_info;
|
||||
|
||||
tree_node = tree_find(&port_info->sock_tree, socket);
|
||||
if (tree_node == NULL)
|
||||
ep_sock_t* sock_info = ep_sock_find(&port_info->sock_tree, socket);
|
||||
if (sock_info == NULL)
|
||||
return -1;
|
||||
|
||||
sock_info = ep_sock_from_tree_node(tree_node);
|
||||
|
||||
if (ep_sock_set_event(port_info, sock_info, ev) < 0)
|
||||
return -1;
|
||||
|
||||
@ -65,15 +60,10 @@ static int _ep_ctl_mod(ep_port_t* port_info,
|
||||
}
|
||||
|
||||
static int _ep_ctl_del(ep_port_t* port_info, uintptr_t socket) {
|
||||
tree_node_t* tree_node;
|
||||
ep_sock_t* sock_info;
|
||||
|
||||
tree_node = tree_find(&port_info->sock_tree, socket);
|
||||
if (tree_node == NULL)
|
||||
ep_sock_t* sock_info = ep_sock_find(&port_info->sock_tree, socket);
|
||||
if (sock_info == NULL)
|
||||
return -1;
|
||||
|
||||
sock_info = ep_sock_from_tree_node(tree_node);
|
||||
|
||||
if (ep_sock_delete(port_info, sock_info) < 0)
|
||||
return -1;
|
||||
|
||||
@ -282,7 +272,7 @@ int epoll_close(epoll_t port_handle) {
|
||||
|
||||
/* Remove all entries from the socket_state tree. */
|
||||
while ((tree_node = tree_root(&port_info->sock_tree)) != NULL) {
|
||||
ep_sock_t* sock_info = ep_sock_from_tree_node(tree_node);
|
||||
ep_sock_t* sock_info = container_of(tree_node, ep_sock_t, tree_node);
|
||||
ep_sock_delete(port_info, sock_info);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user