diff options
-rw-r--r-- | include/libssh/libssh.h | 1 | ||||
-rw-r--r-- | src/poll.c | 30 |
2 files changed, 31 insertions, 0 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index 9dd6b49..e714eca 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -482,6 +482,7 @@ LIBSSH_API ssh_event ssh_event_new(void); LIBSSH_API int ssh_event_add_fd(ssh_event event, socket_t fd, short events, ssh_event_callback cb, void *userdata); LIBSSH_API int ssh_event_add_session(ssh_event event, ssh_session session); +LIBSSH_API int ssh_event_remove_fd(ssh_event event, socket_t fd); LIBSSH_API int ssh_event_remove_session(ssh_event event, ssh_session session); LIBSSH_API void ssh_event_free(ssh_event event); @@ -836,6 +836,36 @@ int ssh_event_add_session(ssh_event event, ssh_session session) { } /** + * @brief Remove a socket fd from an event context. + * + * @param event The ssh_event object. + * @param fd The fd to remove. + * + * @returns SSH_OK on success + * SSH_ERROR on failure + */ +int ssh_event_remove_fd(ssh_event event, socket_t fd) { + ssh_poll_handle p; + register size_t i, used; + int rc = SSH_ERROR; + + if(event == NULL || event->ctx == NULL) { + return SSH_ERROR; + } + + used = event->ctx->polls_used; + for (i = 0; i < used; i++) { + if(fd == event->ctx->pollfds[i].fd) { + p = event->ctx->pollptrs[i]; + ssh_poll_ctx_remove(event->ctx, p); + rc = SSH_OK; + } + } + + return rc; +} + +/** * @brief Remove a session object from an event context. * * @param event The ssh_event object. |