summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-12-20 20:55:54 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-12-20 20:55:54 +0100
commit130fac6c16c4fb8a7eeec116adc479aad1e3273d (patch)
tree3cc1b901ec043d3910dfe225bf07045bbbe134c4
parent6222ef8052fdc369977620d38d323f2f90a77011 (diff)
downloadcurl-130fac6c16c4fb8a7eeec116adc479aad1e3273d.tar.gz
timeleft_accept: ack global timeout, moved to ftp.c
First off the timeout for accepting a server connect back must of course respect a global timeout. Then the timeleft function is only used by ftp code so it was moved to ftp.c and made static.
-rw-r--r--lib/connect.c28
-rw-r--r--lib/connect.h5
-rw-r--r--lib/ftp.c42
-rw-r--r--lib/ftp.h2
4 files changed, 42 insertions, 35 deletions
diff --git a/lib/connect.c b/lib/connect.c
index cc835808b..bcd538406 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -99,34 +99,6 @@ singleipconnect(struct connectdata *conn,
bool *connected);
/*
- * Curl_timeleft_accept() returns the amount of milliseconds left allowed for
- * waiting server to connect. If the value is negative, the timeout time has
- * already elapsed.
- *
- * The start time is stored in progress.t_acceptdata - as set with
- * Curl_pgrsTime(..., TIMER_STARTACCEPT);
- *
- */
-long Curl_timeleft_accept(struct SessionHandle *data)
-{
- long timeout_ms = DEFAULT_ACCEPT_TIMEOUT;
- struct timeval now;
-
- if(data->set.accepttimeout > 0)
- timeout_ms = data->set.accepttimeout;
-
- now = Curl_tvnow();
-
- /* subtract elapsed time */
- timeout_ms -= Curl_tvdiff(now, data->progress.t_acceptdata);
- if(!timeout_ms)
- /* avoid returning 0 as that means no timeout! */
- return -1;
-
- return timeout_ms;
-}
-
-/*
* Curl_timeleft() returns the amount of milliseconds left allowed for the
* transfer/connection. If the value is negative, the timeout time has already
* elapsed.
diff --git a/lib/connect.h b/lib/connect.h
index 4e905bdf5..f84361f2e 100644
--- a/lib/connect.h
+++ b/lib/connect.h
@@ -43,12 +43,7 @@ long Curl_timeleft(struct SessionHandle *data,
struct timeval *nowp,
bool duringconnect);
-/* function that returns how much time there's left to wait for incoming
- server connect */
-long Curl_timeleft_accept(struct SessionHandle *data);
-
#define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
-#define DEFAULT_ACCEPT_TIMEOUT 60000 /* milliseconds == one minute */
/*
* Used to extract socket and connectdata struct for the most recent
diff --git a/lib/ftp.c b/lib/ftp.c
index a4512e900..6f6a54a6d 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -355,6 +355,44 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)
}
+/*
+ * ftp_timeleft_accept() returns the amount of milliseconds left allowed for
+ * waiting server to connect. If the value is negative, the timeout time has
+ * already elapsed.
+ *
+ * The start time is stored in progress.t_acceptdata - as set with
+ * Curl_pgrsTime(..., TIMER_STARTACCEPT);
+ *
+ */
+static long ftp_timeleft_accept(struct SessionHandle *data)
+{
+ long timeout_ms = DEFAULT_ACCEPT_TIMEOUT;
+ long other;
+ struct timeval now;
+
+ if(data->set.accepttimeout > 0)
+ timeout_ms = data->set.accepttimeout;
+
+ now = Curl_tvnow();
+
+ /* check if the generic timeout possibly is set shorter */
+ other = Curl_timeleft(data, &now, FALSE);
+ if(other && (other < timeout_ms))
+ /* note that this also works fine for when other happens to be negative
+ due to it already having elapsed */
+ timeout_ms = other;
+ else {
+ /* subtract elapsed time */
+ timeout_ms -= Curl_tvdiff(now, data->progress.t_acceptdata);
+ if(!timeout_ms)
+ /* avoid returning 0 as that means no timeout! */
+ return -1;
+ }
+
+ return timeout_ms;
+}
+
+
/***********************************************************************
*
* ReceivedServerConnect()
@@ -378,7 +416,7 @@ static CURLcode ReceivedServerConnect(struct connectdata* conn, bool* received)
*received = FALSE;
- timeout_ms = Curl_timeleft_accept(data);
+ timeout_ms = ftp_timeleft_accept(data);
infof(data, "Checking for server connect\n");
if(timeout_ms < 0) {
/* if a timeout was already reached, bail out */
@@ -502,7 +540,7 @@ static CURLcode AllowServerConnect(struct connectdata *conn, bool *connected)
Curl_pgrsTime(data, TIMER_STARTACCEPT);
for(;;) {
- timeout_ms = Curl_timeleft_accept(data);
+ timeout_ms = ftp_timeleft_accept(data);
if(timeout_ms < 0) {
/* if a timeout was already reached, bail out */
failf(data, "Accept timeout occurred while waiting server connect");
diff --git a/lib/ftp.h b/lib/ftp.h
index 21e47374b..d359f28f3 100644
--- a/lib/ftp.h
+++ b/lib/ftp.h
@@ -156,4 +156,6 @@ struct ftp_conn {
it */
};
+#define DEFAULT_ACCEPT_TIMEOUT 60000 /* milliseconds == one minute */
+
#endif /* HEADER_CURL_FTP_H */