aboutsummaryrefslogtreecommitdiff
path: root/lib/connect.c
diff options
context:
space:
mode:
authorJay Satiro <raysatiro@yahoo.com>2016-12-08 16:32:36 -0500
committerJay Satiro <raysatiro@yahoo.com>2016-12-19 02:26:52 -0500
commitd00f2a8f2e8529024709f70c8ab4c4138dc651a0 (patch)
treeaa867b0c1a2d4f5f3f59541d4990adf8576a27c3 /lib/connect.c
parentafb57f7b0bfe179b1d31acf652cc136349de32ec (diff)
http_proxy: Fix proxy CONNECT hang on pending data
- Check for pending data before waiting on the socket. Bug: https://github.com/curl/curl/issues/1156 Reported-by: Adam Langley
Diffstat (limited to 'lib/connect.c')
-rw-r--r--lib/connect.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/connect.c b/lib/connect.c
index 284726ae3..524d885eb 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -1404,3 +1404,16 @@ void Curl_conncontrol(struct connectdata *conn,
should assign this bit */
}
}
+
+/* Data received can be cached at various levels, so check them all here. */
+bool Curl_conn_data_pending(struct connectdata *conn, int sockindex)
+{
+ int readable;
+
+ if(Curl_ssl_data_pending(conn, sockindex) ||
+ Curl_recv_has_postponed_data(conn, sockindex))
+ return true;
+
+ readable = SOCKET_READABLE(conn->sock[sockindex], 0);
+ return (readable > 0 && (readable & CURL_CSELECT_IN));
+}