aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES16
-rw-r--r--RELEASE-NOTES5
-rw-r--r--lib/ftp.c15
3 files changed, 31 insertions, 5 deletions
diff --git a/CHANGES b/CHANGES
index 0da422072..399fca226 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,22 @@
Changelog
Daniel (5 December 2006)
+- 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.
+
+ The proper fix, left for the future, is of course to make the active FTP
+ case to act in a non-blocking way too.
+
- Matt Witherspoon fixed a problem case when the CPU load went to 100% when a
HTTP upload was disconnected:
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 28cf5837f..2db25e372 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -26,7 +26,8 @@ This release includes the following bugfixes:
o HTTP responses on persistent connections without Content-Length nor chunked
encoding are now considered to be without response body
o Content-Range: header parsing improved
- o CPU 100% load when upload connection broke
+ o CPU 100% load when HTTP upload connection broke
+ o active FTP didn't work with multi interface
Other curl-related news:
@@ -44,6 +45,6 @@ advice from friends like these:
James Housley, Olaf Stueben, Yang Tse, Gisle Vanem, Bradford Bruce,
Ciprian Badescu, Dmitriy Sergeyev, Nir Soffer, Venkat Akella, Toon Verwaest,
- Matt Witherspoon
+ Matt Witherspoon, Alexey Simak
Thanks! (and sorry if I forgot to mention someone)
diff --git a/lib/ftp.c b/lib/ftp.c
index e3d14a2ba..4e4dd5346 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -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) {