aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxjoaalm <joao.almeida@blue-tc.com>2014-07-31 15:30:59 +0200
committerAris Adamantiadis <aris@0xbadc0de.be>2015-02-23 22:02:35 +0100
commit8f2eee6509a669dda51eb92e622fa935febfc7e5 (patch)
tree295e4087260e13b752b7494f65a0e977feaf77dd
parent4bd704295c77913b9d18f8f497b8f98b239e5b77 (diff)
downloadlibssh-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.c27
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);