diff options
author | Jay Satiro <raysatiro@yahoo.com> | 2016-12-08 16:32:36 -0500 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2016-12-19 02:26:52 -0500 |
commit | d00f2a8f2e8529024709f70c8ab4c4138dc651a0 (patch) | |
tree | aa867b0c1a2d4f5f3f59541d4990adf8576a27c3 /lib/connect.c | |
parent | afb57f7b0bfe179b1d31acf652cc136349de32ec (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.c | 13 |
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)); +} |