From 7b08e9eb937dfe13d8d4b71d5226f288cdb4a67a Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Fri, 28 Feb 2003 10:58:25 +0000 Subject: IDLE and CYgwin fix patch. svn path=/trunk/; revision=3793 --- driver.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'driver.c') diff --git a/driver.c b/driver.c index 4a4f4d3f..50596490 100644 --- a/driver.c +++ b/driver.c @@ -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) -- cgit v1.2.3