From 1cacf853da30edb8a9f6b834df43ee639a1811f2 Mon Sep 17 00:00:00 2001 From: Gokhan Sengun Date: Wed, 7 Dec 2011 16:00:20 +0100 Subject: [PATCH] Curl_closesocket: clear sock_accepted on close As a follow-up from commit d5b5f64bce3a8, clear the sock_accepted status when such a socket is closed to avoid a re-used connection to retain the state wrongly. Bug: http://curl.haxx.se/mail/lib-2011-12/0079.html --- lib/connect.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/connect.c b/lib/connect.c index a560c4d3b..af225ab83 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -1111,10 +1111,13 @@ int Curl_closesocket(struct connectdata *conn, curl_socket_t sock) { if(conn && conn->fclosesocket) { - if((sock != conn->sock[SECONDARYSOCKET]) || - !conn->sock_accepted[SECONDARYSOCKET]) + if((sock == conn->sock[SECONDARYSOCKET]) && + conn->sock_accepted[SECONDARYSOCKET]) /* if this socket matches the second socket, and that was created with - accept, then we MUST NOT call the callback */ + accept, then we MUST NOT call the callback but clear the accepted + status */ + conn->sock_accepted[SECONDARYSOCKET] = FALSE; + else return conn->fclosesocket(conn->closesocket_client, sock); } return sclose(sock);