aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormilo <milo@r0ot.me>2011-02-20 14:06:19 +0100
committermilo <milo@r0ot.me>2011-02-20 14:37:34 +0100
commite40261c22ce8630558fdadf2932f472793528a1b (patch)
tree265400ed205e03bfd3a9080d1a772f74dc6db33c
parent6582da1d67ca85a1efd67c4d751295a7a818d34e (diff)
downloadlibssh-e40261c22ce8630558fdadf2932f472793528a1b.tar.gz
libssh-e40261c22ce8630558fdadf2932f472793528a1b.tar.xz
libssh-e40261c22ce8630558fdadf2932f472793528a1b.zip
poll: Added function to remove fd from the event context.
-rw-r--r--include/libssh/libssh.h1
-rw-r--r--src/poll.c30
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);
diff --git a/src/poll.c b/src/poll.c
index 233e8c3..bfb54e6 100644
--- a/src/poll.c
+++ b/src/poll.c
@@ -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.