timeout in read, write and accept
authorMarcel Poul <marcel.poul@cern.ch>
Sun, 27 May 2012 12:16:35 +0000 (12:16 +0000)
committerMarcel Poul <marcel.poul@cern.ch>
Sun, 27 May 2012 12:16:35 +0000 (12:16 +0000)
emi.canl.canl-c/src/canl.c
emi.canl.canl-c/src/canl_ssl.c

index bbfdc10..4558df5 100644 (file)
@@ -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;
index a4f3d42..81ac990 100644 (file)
@@ -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");
         }