mirror of
https://github.com/curl/curl.git
synced 2025-09-26 14:06:48 +03:00
ftp_domore_getsock: when passive mode, the second conn is already there
This makes the socket callback get called with the proper bitmask as otherwise the application could be left hanging waiting for reading on an upload connection! Bug: http://curl.haxx.se/mail/lib-2013-08/0043.html Reported-by: Bill Doyle
This commit is contained in:
parent
0b4557f766
commit
f584312e81
12
lib/ftp.c
12
lib/ftp.c
|
@ -877,11 +877,13 @@ static int ftp_domore_getsock(struct connectdata *conn, curl_socket_t *socks,
|
||||||
remote site, or we could wait for that site to connect to us. Or just
|
remote site, or we could wait for that site to connect to us. Or just
|
||||||
handle ordinary commands.
|
handle ordinary commands.
|
||||||
|
|
||||||
When waiting for a connect, we can be in FTP_STOP state (or we're in
|
When waiting for a connect (in PORT mode), we can be in FTP_STOP state
|
||||||
FTP_STOR when we do an upload) and then we wait for the secondary socket
|
(or we're in FTP_STOR when we do an upload) and then we wait for the
|
||||||
to become writeable. . If we're in another state, we're still handling
|
secondary socket to become writeable. If we're in STOR or STOP in passive
|
||||||
commands on the control (primary) connection.
|
mode, we already have the seconnd connection done.
|
||||||
|
|
||||||
|
If we're in another state, we're still handling commands on the control
|
||||||
|
(primary) connection.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch(ftpc->state) {
|
switch(ftpc->state) {
|
||||||
|
@ -893,7 +895,7 @@ static int ftp_domore_getsock(struct connectdata *conn, curl_socket_t *socks,
|
||||||
}
|
}
|
||||||
|
|
||||||
socks[0] = conn->sock[SECONDARYSOCKET];
|
socks[0] = conn->sock[SECONDARYSOCKET];
|
||||||
if(ftpc->wait_data_conn) {
|
if(ftpc->wait_data_conn || !conn->data->set.ftp_use_port) {
|
||||||
socks[1] = conn->sock[FIRSTSOCKET];
|
socks[1] = conn->sock[FIRSTSOCKET];
|
||||||
return GETSOCK_READSOCK(0) | GETSOCK_READSOCK(1);
|
return GETSOCK_READSOCK(0) | GETSOCK_READSOCK(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user