diff --git a/dist/antd-1.0.4b.tar.gz b/dist/antd-1.0.4b.tar.gz index 91ef74b..9e52515 100644 Binary files a/dist/antd-1.0.4b.tar.gz and b/dist/antd-1.0.4b.tar.gz differ diff --git a/lib/handle.c b/lib/handle.c index 0f0b0f4..c880baf 100644 --- a/lib/handle.c +++ b/lib/handle.c @@ -210,9 +210,16 @@ int antd_send(void *src, const void* data, int len) { written += count; writelen = (len - written) > BUFFLEN?BUFFLEN:(len-written); + time(&source->last_io); } else { + if(difftime( time(NULL), source->last_io) > MAX_IO_WAIT_TIME) + { + if(written == 0) + written = count; + break; + } //printf(" received equal to or less than 0\n") switch (err) { @@ -300,12 +307,13 @@ int antd_send(void *src, const void* data, int len) { written += count; writelen = (len - written) > BUFFLEN?BUFFLEN:(len-written); + time(&source->last_io); } - else if(errno != EAGAIN && errno != EWOULDBLOCK) + else if(difftime( time(NULL), source->last_io) > MAX_IO_WAIT_TIME || (count == -1 && errno != EAGAIN && errno != EWOULDBLOCK)) { if(written == 0) written = count; - ERROR("Error while writing: %s", strerror(errno)); + //ERROR("Error while writing: %s", strerror(errno)); break; //return written; } @@ -317,8 +325,6 @@ int antd_send(void *src, const void* data, int len) { antd_close(src); }*/ - if(written > 0) - time(&source->last_io); return written; } int antd_recv(void *src, void* data, int len) @@ -346,9 +352,17 @@ int antd_recv(void *src, void* data, int len) { read += received; readlen = (len - read) > BUFFLEN?BUFFLEN:(len-read); + time(&source->last_io); } else { + // Timeout, quit + if(difftime( time(NULL), source->last_io) > MAX_IO_WAIT_TIME) + { + if(read == 0) + read = received; + break; + } //printf(" received equal to or less than 0\n") switch (err) { @@ -447,7 +461,7 @@ int antd_recv(void *src, void* data, int len) ptr = (char* )data; readlen = len > BUFFLEN?BUFFLEN:len; read = 0; - while (readlen > 0 )//&& source->attempt < MAX_ATTEMPT + while (readlen > 0 ) { received = recv(((int) source->sock), ptr+read, readlen, 0); //LOG("Read : %c\n", *ptr); @@ -455,9 +469,10 @@ int antd_recv(void *src, void* data, int len) { read += received; readlen = (len - read) > BUFFLEN?BUFFLEN:(len-read); + time(&source->last_io); //LOG("Read len is %d\n", readlen); } - else if(errno != EAGAIN && errno != EWOULDBLOCK) + else if( difftime( time(NULL), source->last_io) > MAX_IO_WAIT_TIME || (errno != EAGAIN && errno != EWOULDBLOCK)) { //ERROR("Error while reading: %s", strerror(errno)); if(read ==0) @@ -474,8 +489,6 @@ int antd_recv(void *src, void* data, int len) { antd_close(src); }*/ - if(read > 0) - time(&source->last_io); return read; } void set_nonblock(int socket) { diff --git a/lib/handle.h b/lib/handle.h index 7403a7e..8e5fbf6 100644 --- a/lib/handle.h +++ b/lib/handle.h @@ -28,7 +28,7 @@ #define __RESULT__ "{\"result\":%d,\"msg\":\"%s\"}" #define FORM_URL_ENCODE "application/x-www-form-urlencoded" #define FORM_MULTI_PART "multipart/form-data" -#define MAX_WAIT_S 2 // 1/3 minute +#define MAX_IO_WAIT_TIME 5 // second //extern config_t server_config;