diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/socket.c | 4 | ||||
-rw-r--r-- | src/common/socket.h | 9 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/common/socket.c b/src/common/socket.c index b5eda7b27..014ef9272 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -857,7 +857,7 @@ int do_parsepacket(void) sd = session[i];
if(!sd)
continue;
- if ((sd->rdata_tick != 0) && DIFF_TICK(last_tick,sd->rdata_tick) > stall_time) {
+ if (sd->rdata_tick && DIFF_TICK(last_tick,sd->rdata_tick) > stall_time) {
ShowInfo ("Session #%d timed out\n", i);
sd->eof = 1;
}
@@ -876,7 +876,7 @@ int do_parsepacket(void) continue;
}
}
- RFIFOHEAD(i);
+ RFIFOHEAD(i);
RFIFOFLUSH(i);
}
return 0;
diff --git a/src/common/socket.h b/src/common/socket.h index 502529419..2774b9c7f 100644 --- a/src/common/socket.h +++ b/src/common/socket.h @@ -38,7 +38,14 @@ extern time_t stall_time; #define RFIFOW(fd,pos) (*(unsigned short*)RFIFOP(fd,pos))
#define RFIFOL(fd,pos) (*(unsigned long*)RFIFOP(fd,pos))
#define RFIFOREST(fd) (session[fd]->rdata_size-session[fd]->rdata_pos)
-#define RFIFOFLUSH(fd) (memmove(session[fd]->rdata,RFIFOP(fd,0),RFIFOREST(fd)),session[fd]->rdata_size=RFIFOREST(fd),session[fd]->rdata_pos=0)
+#define RFIFOFLUSH(fd) \
+ if(session[fd]->rdata_size == session[fd]->rdata_pos) \
+ { session[fd]->rdata_size = session[fd]->rdata_pos = 0; } else { \
+ session[fd]->rdata_size -= session[fd]->rdata_pos; \
+ memmove(session[fd]->rdata, session[fd]->rdata+session[fd]->rdata_pos, session[fd]->rdata_size); \
+ session[fd]->rdata_pos=0; \
+ }
+
//#define RFIFOSKIP(fd,len) ((session[fd]->rdata_size-session[fd]->rdata_pos-(len)<0) ? (fprintf(stderr,"too many skip\n"),exit(1)) : (session[fd]->rdata_pos+=(len)))
#define RBUFP(p,pos) (((unsigned char*)(p))+(pos))
|