From af8315b9ce287874e1b374743d6fbaa5fc5c2cfd Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Wed, 7 Jul 2010 10:00:09 +0200 Subject: [PATCH] Fixed ssh_socket_poll behaviour --- libssh/socket.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/libssh/socket.c b/libssh/socket.c index b722462d..402a5b78 100644 --- a/libssh/socket.c +++ b/libssh/socket.c @@ -484,22 +484,19 @@ int ssh_socket_poll(struct socket *s, int *writeable, int *except) { if (!s->data_to_read) { fd->events |= POLLIN; - } else if (!s->data_to_write) { - fd->events |= POLLOUT; - } else { - *except = 1; - *writeable = 0; - - leave_function(); - return 1; } - - /* Make the call, and listen for errors */ - rc = ssh_poll(fd, 1, 0); - if (rc < 0) { - ssh_set_error(session, SSH_FATAL, "poll(): %s", strerror(errno)); - leave_function(); - return -1; + if (!s->data_to_write) { + fd->events |= POLLOUT; + } + /* do not do poll if fd->events is empty, we already know the response */ + if(fd->events != 0){ + /* Make the call, and listen for errors */ + rc = ssh_poll(fd, 1, 0); + if (rc < 0) { + ssh_set_error(session, SSH_FATAL, "poll(): %s", strerror(errno)); + leave_function(); + return -1; + } } if (!s->data_to_read) {