diff options
author | Jakub Sławiński | 2006-04-06 23:34:51 +0200 |
---|---|---|
committer | Joshua Judson Rosen | 2014-07-17 21:15:02 +0200 |
commit | 1361f0e88138653d2437f45ddf940206ed0e93b7 (patch) | |
tree | 3507c0e145a2674d99e9da65cd8dc7ebcc91bdc1 /src/timeval_functions.c | |
parent | v0.8 (diff) | |
download | apf-1361f0e88138653d2437f45ddf940206ed0e93b7.tar.gz |
v0.8.1
- Fixed: enableproxy option in server's config file
- Added: clients idle time
- Added: 'maxidle' option
- Modified: task scheduling subsystem has been completely rewritten
- Fixed: segmentation fault in http tunnels after multiple simultaneous POST
connections from the same source
- Fixed: unexpected connection close when http proxy was too slow
- Fixed: SIGSEGV in http proxy mode under cygwin
- Added: enabled the SO_KEEPALIVE option for all the sockets used by the apf
- Added: 60 seconds timeout for SSL_connect
Diffstat (limited to 'src/timeval_functions.c')
-rw-r--r-- | src/timeval_functions.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/timeval_functions.c b/src/timeval_functions.c index 84bfe7e..394b654 100644 --- a/src/timeval_functions.c +++ b/src/timeval_functions.c @@ -20,6 +20,9 @@ #include <config.h> +#include <stdlib.h> +#include <assert.h> + #include "timeval_functions.h" /* @@ -38,3 +41,94 @@ timeval_create(long tv_sec, long tv_usec) tmp.tv_usec = tv_usec; return tmp; } + +/* + * Function name: timeval_compare + * Description: Compares two pointers to timeval structures. + * Arguments: first - the first timeval structure to compare + * second - the second timeval structure to compare + * Returns: -1 - the second structure is bigger + * 0 - structures are equals + * 1 - the first structure is bigger + */ + +int +timeval_compare(struct timeval* first, struct timeval* second) +{ + if (first == NULL) { + if (second == NULL) { + return 0; + } + else { + return -1; + } + } + if (second == NULL) { + return 1; + } + if (first->tv_sec < second->tv_sec) { + return -1; + } + if (first->tv_sec > second->tv_sec) { + return 1; + } + if (first->tv_usec < second->tv_usec) { + return -1; + } + if (first->tv_usec > second->tv_usec) { + return 1; + } + return 0; +} + +/* + * Function name: timeval_subtract + * Description: Substracts second timeval structure from the first, updating the latter one. + * Arguments: first - the first timeval structure to subtract operation + * second - the second timeval structure to subtract operation + * Returns: 0 - success, + * 1 - failure. + */ + +int +timeval_subtract(struct timeval* first, struct timeval* second) +{ + assert(first != NULL); + assert(second != NULL); + if ((first == NULL) || (second == NULL)) { + return 1; + } + if (first->tv_usec < second->tv_usec) { + first->tv_sec -= 1; + first->tv_usec = 1000000 - second->tv_usec + first->tv_usec; + } + else { + first->tv_usec -= second->tv_usec; + } + first->tv_sec -= second->tv_sec; + return 0; +} + +/* + * Function name: timeval_lq_zero + * Description: Checks if the timer is less or equiv zero. + * Arguments: timer - the timeval structure to check + * Returns: 1 - the timer is less or equiv zero, + * 0 - the timer is bigger than zero. + */ + +int +timeval_lq_zero(struct timeval* timer) +{ + assert(timer != NULL); + if (timer == NULL) { + return 0; + } + if (timer->tv_sec < 0) { + return 1; + } + if ((timer->tv_sec == 0) && (timer->tv_usec == 0)) { + return 1; + } + return 0; +} |