diff --git a/src/agent.c b/src/agent.c index ce4ce16e..3a15183e 100644 --- a/src/agent.c +++ b/src/agent.c @@ -425,11 +425,14 @@ cleanup: int rc; \ \ while(*(total) < (length)) { \ - if(!(agent)->pending_io) \ + if(!(agent)->pending_io) { \ ret = (func)((agent)->pipe, (char *)(buffer) + *(total), \ (DWORD)((length) - *(total)), \ &bytes_transferred, \ &(agent)->overlapped); \ + if(ret && !bytes_transferred) \ + return LIBSSH2_ERROR_SOCKET_DISCONNECT; \ + } \ else \ ret = GetOverlappedResult((agent)->pipe, \ &(agent)->overlapped, \ @@ -619,6 +622,8 @@ static int agent_connect_unix(LIBSSH2_AGENT *agent) flags, abstract); \ if(rc < 0) \ return rc; \ + else if(!rc) \ + return LIBSSH2_ERROR_SOCKET_DISCONNECT; \ \ finished += rc; \ } \