diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ftp.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -753,6 +753,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn, unsigned short port_min = 0; unsigned short port_max = 0; unsigned short port; + bool possibly_non_local = TRUE; char *addr = NULL; @@ -869,6 +870,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn, break; } host = hbuf; /* use this host name */ + possibly_non_local = FALSE; /* we know it is local now */ } /* resolv ip/host to ip */ @@ -932,12 +934,12 @@ static CURLcode ftp_state_use_port(struct connectdata *conn, if(bind(portsock, sa, sslen) ) { /* It failed. */ error = SOCKERRNO; - if(error == EADDRNOTAVAIL) { - + if(possibly_non_local && (error == EADDRNOTAVAIL)) { /* The requested bind address is not local. Use the address used for * the control connection instead and restart the port loop */ - failf(data, "bind(port=%hu) failed: %s", port, + + infof(data, "bind(port=%hu) on non-local address failed: %s", port, Curl_strerror(conn, error) ); sslen = sizeof(ss); @@ -948,6 +950,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn, return CURLE_FTP_PORT_FAILED; } port = port_min; + possibly_non_local = FALSE; /* don't try this again */ continue; } else if(error != EADDRINUSE && error != EACCES) { |