mirror of
https://github.com/curl/curl.git
synced 2024-11-27 05:50:21 +08:00
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
This commit is contained in:
parent
23ef5e4ba2
commit
82b0aebef3
@ -348,6 +348,10 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
infof(data, "Connection accepted from server\n");
|
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) {
|
if(data->set.fsockopt) {
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
@ -358,13 +362,11 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)
|
|||||||
|
|
||||||
if(error) {
|
if(error) {
|
||||||
Curl_closesocket(conn, s); /* close the socket and bail out */
|
Curl_closesocket(conn, s); /* close the socket and bail out */
|
||||||
|
conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
|
||||||
return CURLE_ABORTED_BY_CALLBACK;
|
return CURLE_ABORTED_BY_CALLBACK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->sock[SECONDARYSOCKET] = s;
|
|
||||||
curlx_nonblock(s, TRUE); /* enable non-blocking */
|
|
||||||
conn->sock_accepted[SECONDARYSOCKET] = TRUE;
|
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user