From af8315b9ce287874e1b374743d6fbaa5fc5c2cfd Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Wed, 7 Jul 2010 10:00:09 +0200 Subject: Fixed ssh_socket_poll behaviour --- libssh/socket.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'libssh/socket.c') 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) { + } + 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; + /* 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) { -- cgit