diff options
| author | Gokhan Sengun <gokhansengun@gmail.com> | 2012-06-25 02:06:50 +0300 | 
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2012-08-16 23:20:12 +0200 | 
| commit | 82b0aebef36953604aa41b13669d48b2dc8983b8 (patch) | |
| tree | c169344143bd1475026401c7ba2c32a73f60369c | |
| parent | 23ef5e4ba22386ccc43f99db1d0f4106dc603e80 (diff) | |
ftp: active conn, place calling sockopt callback at the end of function
Commit b91d29a28e170c16d65d956db79f2cd3a82372d2 introduces a bug and breaks Curl_closesocket function. sock_accepted flag for the second socket should be tagged as TRUE before the sockopt callback is called because in case the callback returns an error, Curl_closesocket function is going to call the - fclosesocket - callback for the accept()ed socket
| -rw-r--r-- | lib/ftp.c | 8 | 
1 files changed, 5 insertions, 3 deletions
@@ -348,6 +348,10 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)    }    infof(data, "Connection accepted from server\n"); +  conn->sock[SECONDARYSOCKET] = s; +  curlx_nonblock(s, TRUE); /* enable non-blocking */ +  conn->sock_accepted[SECONDARYSOCKET] = TRUE; +    if(data->set.fsockopt) {      int error = 0; @@ -358,13 +362,11 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)      if(error) {        Curl_closesocket(conn, s); /* close the socket and bail out */ +      conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;        return CURLE_ABORTED_BY_CALLBACK;      }    } -  conn->sock[SECONDARYSOCKET] = s; -  curlx_nonblock(s, TRUE); /* enable non-blocking */ -  conn->sock_accepted[SECONDARYSOCKET] = TRUE;    return CURLE_OK;  }  | 
