From: Marcel Poul Date: Sun, 27 May 2012 12:16:35 +0000 (+0000) Subject: timeout in read, write and accept X-Git-Tag: canl_merge_branch_1_0_head_take_2_dst~4 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=35cdeabfc0fe5d5353a676a71cc7dfc39a871e57;p=jra1mw.git timeout in read, write and accept --- diff --git a/emi.canl.canl-c/src/canl.c b/emi.canl.canl-c/src/canl.c index bbfdc10..4558df5 100644 --- a/emi.canl.canl-c/src/canl.c +++ b/emi.canl.canl-c/src/canl.c @@ -241,7 +241,7 @@ static int try_connect(glb_ctx *glb_cc, io_handler *io_cc, char *addr, /* XXX timeouts missing */ if (err) { return update_error(glb_cc, errno, POSIX_ERROR, - "Failed to open network connection"); + "Failed to establish network connection"); } io_cc->sock = sock; diff --git a/emi.canl.canl-c/src/canl_ssl.c b/emi.canl.canl-c/src/canl_ssl.c index a4f3d42..81ac990 100644 --- a/emi.canl.canl-c/src/canl_ssl.c +++ b/emi.canl.canl-c/src/canl_ssl.c @@ -784,6 +784,7 @@ static int do_ssl_connect(glb_ctx *cc, io_handler *io, curtime = time(NULL); } while (TEST_SELECT(ret, ret2, locl_timeout, curtime, starttime, errorcode)); + timeout->tv_sec = timeout->tv_sec - (curtime - starttime); //TODO split ret2 and ret into 2 ifs to set approp. err. msg and check ag. if (ret2 <= 0 || ret <= 0) { if (timeout && (curtime - starttime >= locl_timeout)){ @@ -853,6 +854,8 @@ printf ("FUNC: %s ;",ERR_func_error_string(ssl_err)); printf ("LIB: %s \n",ERR_reason_error_string(ssl_err)); #endif +timeout->tv_sec = timeout->tv_sec - (curtime - starttime); + //TODO split ret2 and ret into 2 ifs to set approp. error message if (ret2 <= 0 || ret <= 0) { if (timeout && (curtime - starttime >= locl_timeout)){ @@ -956,6 +959,8 @@ ssl_write(glb_ctx *cc, io_handler *io, void *auth_ctx, } while (ret <= 0 && do_continue); end: + curtime = time(NULL); + timeout->tv_sec = timeout->tv_sec - (curtime - starttime); if (err) { errno = err; set_error (cc, err, POSIX_ERROR, "Error during SSL write"); @@ -1022,9 +1027,12 @@ ssl_read(glb_ctx *cc, io_handler *io, void *auth_ctx, } } while (TEST_SELECT(ret, ret2, timeout, curtime, starttime, error)); + tout->tv_sec = tout->tv_sec - (curtime - starttime); if (ret <= 0 || ret2 <= 0) { // what if ret2 == 0? conn closed? err = -1; //TODO what to assign if (timeout != -1 && (curtime - starttime >= timeout)){ + tout->tv_sec = 0; + tout->tv_usec = 0; set_error(cc, ETIMEDOUT, POSIX_ERROR, "Connection stuck" " during read: timeout reached"); }