aboutsummaryrefslogtreecommitdiff
path: root/lib/ftp.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-11-19 08:52:33 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-11-19 08:52:33 +0000
commit1a05a90f1ce86394d7966aaaa9539adaa228c6bf (patch)
tree2b9cafe58b4fa7bf01d1b58a23bc5e66157d3279 /lib/ftp.c
parentdcea109bb5ce1c8afeb0510945eb15e86cfcf1dc (diff)
David Phillips' FD_SETSIZE fix
Diffstat (limited to 'lib/ftp.c')
-rw-r--r--lib/ftp.c33
1 files changed, 7 insertions, 26 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index f056dd81f..af42f3fb7 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -34,9 +34,6 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
@@ -96,6 +93,7 @@
#include "strerror.h"
#include "memory.h"
#include "inet_ntop.h"
+#include "select.h"
#if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL)
#include "inet_ntoa_r.h"
@@ -162,8 +160,7 @@ static void freedirs(struct FTP *ftp)
*/
static CURLcode AllowServerConnect(struct connectdata *conn)
{
- fd_set rdset;
- struct timeval dt;
+ int timeout_ms;
struct SessionHandle *data = conn->data;
curl_socket_t sock = conn->sock[SECONDARYSOCKET];
struct timeval now = Curl_tvnow();
@@ -171,10 +168,6 @@ static CURLcode AllowServerConnect(struct connectdata *conn)
long timeout = data->set.connecttimeout?data->set.connecttimeout:
(data->set.timeout?data->set.timeout: 0);
- FD_ZERO(&rdset);
-
- FD_SET(sock, &rdset);
-
if(timeout) {
timeout -= timespent;
if(timeout<=0) {
@@ -184,10 +177,9 @@ static CURLcode AllowServerConnect(struct connectdata *conn)
}
/* we give the server 60 seconds to connect to us, or a custom timeout */
- dt.tv_sec = (int)(timeout?timeout:60);
- dt.tv_usec = 0;
+ timeout_ms = (timeout?timeout:60) * 1000;
- switch (select(sock+1, &rdset, NULL, NULL, &dt)) {
+ switch (Curl_select(sock, CURL_SOCKET_BAD, timeout_ms)) {
case -1: /* error */
/* let's die here */
failf(data, "Error while waiting for server connect");
@@ -250,9 +242,7 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
ssize_t gotbytes;
char *ptr;
long timeout; /* timeout in seconds */
- struct timeval interval;
- fd_set rkeepfd;
- fd_set readfd;
+ int interval_ms;
struct SessionHandle *data = conn->data;
char *line_start;
int code=0; /* default ftp "error code" to return */
@@ -264,13 +254,6 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
if (ftpcode)
*ftpcode = 0; /* 0 for errors */
- FD_ZERO (&readfd); /* clear it */
- FD_SET (sockfd, &readfd); /* read socket */
-
- /* get this in a backup variable to be able to restore it on each lap in the
- select() loop */
- rkeepfd = readfd;
-
ptr=buf;
line_start = buf;
@@ -304,11 +287,9 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
}
if(!ftp->cache) {
- readfd = rkeepfd; /* set every lap */
- interval.tv_sec = 1; /* use 1 second timeout intervals */
- interval.tv_usec = 0;
+ interval_ms = 1 * 1000; /* use 1 second timeout intervals */
- switch (select (sockfd+1, &readfd, NULL, NULL, &interval)) {
+ switch (Curl_select(sockfd, CURL_SOCKET_BAD, interval_ms)) {
case -1: /* select() error, stop reading */
result = CURLE_RECV_ERROR;
failf(data, "FTP response aborted due to select() error: %d", errno);