diff options
author | xjoaalm <joao.almeida@blue-tc.com> | 2014-07-31 15:30:59 +0200 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2015-02-23 22:02:35 +0100 |
commit | 8f2eee6509a669dda51eb92e622fa935febfc7e5 (patch) | |
tree | 295e4087260e13b752b7494f65a0e977feaf77dd | |
parent | 4bd704295c77913b9d18f8f497b8f98b239e5b77 (diff) | |
download | libssh-8f2eee6509a669dda51eb92e622fa935febfc7e5.tar.gz libssh-8f2eee6509a669dda51eb92e622fa935febfc7e5.tar.xz libssh-8f2eee6509a669dda51eb92e622fa935febfc7e5.zip |
Sending EOF on Socket that received a Broken Pipe makes call to poll to hang
Reviewed-by: Aris Adamantiadis <aris@0xbadc0de.be>
Signed-off-by: Joao Pedro Almeida Pereira <joao.almeida@blue-tc.com>
-rw-r--r-- | src/socket.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/socket.c b/src/socket.c index affc6eb7..52206747 100644 --- a/src/socket.c +++ b/src/socket.c @@ -630,10 +630,15 @@ int ssh_socket_nonblocking_flush(ssh_socket s) { if (!ssh_socket_is_open(s)) { session->alive = 0; - /* FIXME use ssh_socket_get_errno */ - ssh_set_error(session, SSH_FATAL, - "Writing packet: error on socket (or connection closed): %s", - strerror(s->last_errno)); + if(s->callbacks && s->callbacks->exception){ + s->callbacks->exception( + SSH_SOCKET_EXCEPTION_ERROR, + s->last_errno,s->callbacks->userdata); + }else{ + ssh_set_error(session, SSH_FATAL, + "Writing packet: error on socket (or connection closed): %s", + strerror(s->last_errno)); + } return SSH_ERROR; } @@ -650,12 +655,16 @@ int ssh_socket_nonblocking_flush(ssh_socket s) { if (w < 0) { session->alive = 0; ssh_socket_close(s); - /* FIXME use ssh_socket_get_errno() */ - /* FIXME use callback for errors */ - ssh_set_error(session, SSH_FATAL, - "Writing packet: error on socket (or connection closed): %s", - strerror(s->last_errno)); + if(s->callbacks && s->callbacks->exception){ + s->callbacks->exception( + SSH_SOCKET_EXCEPTION_ERROR, + s->last_errno,s->callbacks->userdata); + }else{ + ssh_set_error(session, SSH_FATAL, + "Writing packet: error on socket (or connection closed): %s", + strerror(s->last_errno)); + } return SSH_ERROR; } buffer_pass_bytes(s->out_buffer, w); |