diff options
author | Daniel Stenberg <daniel@haxx.se> | 2006-12-05 13:49:29 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2006-12-05 13:49:29 +0000 |
commit | 3c4f622479bafbebe654340ac7b6d68b03573a32 (patch) | |
tree | 023c1e5be1e32e1934b8edea19fd096ff961e519 /lib | |
parent | 3ce43764be4c7b58481b4b7a7d9b77e2c02724cf (diff) |
Alexey Simak filed bug report #1600447
(http://curl.haxx.se/bug/view.cgi?id=1600447) in which he noted that active
FTP connections don't work with the multi interface. The problem is here that
the multi interface state machine has a state during which it can wait for the
data connection to connect, but the active connection is not done in the same
step in the sequence as the passive one is so it doesn't quite work for
active. The active FTP code still use a blocking function to allow the remote
server to connect.
The fix (work-around is a better word) for this problem is to set the
boolean prematurely that the data connection is completed, so that the "wait
for connect" phase ends at once.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ftp.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -573,7 +573,7 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */ /* output debug output if that is requested */ if(data->set.verbose) - Curl_debug(data, CURLINFO_HEADER_IN, + Curl_debug(data, CURLINFO_HEADER_IN, line_start, (size_t)perline, conn); /* @@ -1168,6 +1168,15 @@ static CURLcode ftp_state_use_port(struct connectdata *conn, #endif /* end of ipv4-specific code */ + /* this tcpconnect assignment below is a hackish work-around to make the + multi interface with active FTP work - as it will not wait for a + (passive) connect in Curl_is_connected(). + + The *proper* fix is to make sure that the active connection from the + server is done in a non-blocking way. Currently, it is still BLOCKING. + */ + conn->bits.tcpconnect = TRUE; + state(conn, FTP_PORT); return result; } @@ -3433,7 +3442,7 @@ CURLcode Curl_nbftpsendf(struct connectdata *conn, return res; if(conn->data->set.verbose) - Curl_debug(conn->data, CURLINFO_HEADER_OUT, + Curl_debug(conn->data, CURLINFO_HEADER_OUT, sptr, (size_t)bytes_written, conn); if(bytes_written != (ssize_t)write_len) { @@ -3491,7 +3500,7 @@ CURLcode Curl_ftpsendf(struct connectdata *conn, break; if(conn->data->set.verbose) - Curl_debug(conn->data, CURLINFO_HEADER_OUT, + Curl_debug(conn->data, CURLINFO_HEADER_OUT, sptr, (size_t)bytes_written, conn); if(bytes_written != (ssize_t)write_len) { |