aboutsummaryrefslogtreecommitdiff
path: root/lib/transfer.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2007-04-26 21:30:29 +0000
committerDaniel Stenberg <daniel@haxx.se>2007-04-26 21:30:29 +0000
commitb4d3c4a76ca18c8e1093b8358e83f9a829ca486e (patch)
treee8c3061ab86a78620a415c596348da071b1e823f /lib/transfer.c
parentf213d0db98f8c882e072aedeb8e564ed408ae281 (diff)
Peter O'Gorman found a problem with SCP downloads when the downloaded file
was 16385 bytes (16K+1) and it turned out we didn't properly always "suck out" all data from libssh2. The effect being that libcurl would hang on the socket waiting for data when libssh2 had in fact already read it all...
Diffstat (limited to 'lib/transfer.c')
-rw-r--r--lib/transfer.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/transfer.c b/lib/transfer.c
index d007e8814..760884e9b 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -270,7 +270,10 @@ CURLcode Curl_readrewind(struct connectdata *conn)
static int data_pending(struct connectdata *conn)
{
- return Curl_ssl_data_pending(conn, FIRSTSOCKET);
+ /* in the case of libssh2, we can never be really sure that we have emptied
+ its internal buffers so we MUST always try until we get EAGAIN back */
+ return conn->protocol&(PROT_SCP|PROT_SFTP) ||
+ Curl_ssl_data_pending(conn, FIRSTSOCKET);
}
#ifndef MIN