diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2003-02-28 10:58:25 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2003-02-28 10:58:25 +0000 |
commit | 7b08e9eb937dfe13d8d4b71d5226f288cdb4a67a (patch) | |
tree | b34990d749d16671d80f56ce273f127506f69f95 /driver.c | |
parent | 5283e32c823c36f7904691441c1241edde8ca7b1 (diff) | |
download | fetchmail-7b08e9eb937dfe13d8d4b71d5226f288cdb4a67a.tar.gz fetchmail-7b08e9eb937dfe13d8d4b71d5226f288cdb4a67a.tar.bz2 fetchmail-7b08e9eb937dfe13d8d4b71d5226f288cdb4a67a.zip |
IDLE and CYgwin fix patch.
svn path=/trunk/; revision=3793
Diffstat (limited to 'driver.c')
-rw-r--r-- | driver.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -70,9 +70,16 @@ flag peek_capable; /* can we peek for better error recovery? */ int mailserver_socket_temp = -1; /* socket to free if connect timeout */ static int timeoutcount; /* count consecutive timeouts */ +static int idletimeout; /* timeout occured in idle stage? */ static jmp_buf restart; +int isidletimeout(void) +/* last timeout occured in idle stage? */ +{ + return idletimeout; +} + void set_timeout(int timeleft) /* reset the nonresponse-timeout */ { @@ -82,6 +89,8 @@ void set_timeout(int timeleft) if (timeleft == 0) timeoutcount = 0; + idletimeout = 1; + ntimeout.it_interval.tv_sec = ntimeout.it_interval.tv_usec = 0; ntimeout.it_value.tv_sec = timeleft; ntimeout.it_value.tv_usec = 0; @@ -92,8 +101,11 @@ void set_timeout(int timeleft) static RETSIGTYPE timeout_handler (int signal) /* handle SIGALRM signal indicating a server timeout */ { - timeoutcount++; - longjmp(restart, THROW_TIMEOUT); + if(stage != STAGE_IDLE) { + timeoutcount++; + longjmp(restart, THROW_TIMEOUT); + } else + idletimeout = 1; } static RETSIGTYPE sigpipe_handler (int signal) |