diff --git a/examples/scpclient/scpclient.c b/examples/scpclient/scpclient.c index 2fadcf767..e3622c3f3 100644 --- a/examples/scpclient/scpclient.c +++ b/examples/scpclient/scpclient.c @@ -325,8 +325,10 @@ THREAD_RETURN WOLFSSH_THREAD scp_client(void* args) WCLOSESOCKET(sockFd); wolfSSH_free(ssh); wolfSSH_CTX_free(ctx); - if (ret != WS_SUCCESS && ret != WS_SOCKET_ERROR_E) + if (ret != WS_SUCCESS && ret != WS_SOCKET_ERROR_E && + ret != WS_CHANNEL_CLOSED) { err_sys("Closing scp stream failed. Connection could have been closed by peer"); + } ClientFreeBuffers(pubKeyName, privKeyName, NULL); #if !defined(WOLFSSH_NO_ECC) && defined(FP_ECC) && defined(HAVE_THREAD_LS) diff --git a/src/wolfscp.c b/src/wolfscp.c index 6773ece19..480918767 100644 --- a/src/wolfscp.c +++ b/src/wolfscp.c @@ -730,7 +730,11 @@ int DoScpRequest(WOLFSSH* ssh) /* Peer MUST send back a SSH_MSG_CHANNEL_CLOSE unless already sent*/ ret = wolfSSH_stream_read(ssh, buf, 1); - if (ret != WS_EOF) { + if (ret == WS_SOCKET_ERROR_E || ret == WS_CHANNEL_CLOSED) { + WLOG(WS_LOG_DEBUG, scpState, "Peer hung up, but SCP is done"); + ret = WS_SUCCESS; + } + else if (ret != WS_EOF) { WLOG(WS_LOG_DEBUG, scpState, "Did not receive EOF packet"); } else {