Curl_closesocket: clear sock_accepted on close
authorGokhan Sengun <gokhansengun@gmail.com>
Wed, 7 Dec 2011 15:00:20 +0000 (16:00 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 7 Dec 2011 15:03:00 +0000 (16:03 +0100)
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

index a560c4d..af225ab 100644 (file)
@@ -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);