aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/connection.cpp36
-rw-r--r--src/test/clistress/main.cpp6
-rw-r--r--src/test/srvstress/main.cpp4
3 files changed, 38 insertions, 8 deletions
diff --git a/src/connection.cpp b/src/connection.cpp
index c68c519..3b90329 100644
--- a/src/connection.cpp
+++ b/src/connection.cpp
@@ -6,6 +6,7 @@
6#include <unistd.h> 6#include <unistd.h>
7#include <sys/types.h> 7#include <sys/types.h>
8#include <sys/socket.h> 8#include <sys/socket.h>
9#include <sys/time.h>
9#include <netinet/in.h> 10#include <netinet/in.h>
10#include <netdb.h> 11#include <netdb.h>
11#include <arpa/inet.h> 12#include <arpa/inet.h>
@@ -238,20 +239,21 @@ int Connection::readInput()
238bool Connection::readInput( int nSec, int nUSec, int *pnSecBack, int *pnUSecBack ) 239bool Connection::readInput( int nSec, int nUSec, int *pnSecBack, int *pnUSecBack )
239{ 240{
240 fd_set rfds; 241 fd_set rfds;
241 struct timeval tv; 242 struct timeval tv, start, end;
243 struct timezone tz;
242 int retval; 244 int retval;
243 245
246 gettimeofday( &start, &tz );
247
244 FD_ZERO(&rfds); 248 FD_ZERO(&rfds);
245 FD_SET(nSocket, &rfds); 249 FD_SET(nSocket, &rfds);
246 250
247 tv.tv_sec = nSec; 251 tv.tv_sec = nSec;
248 tv.tv_usec = nUSec; 252 tv.tv_usec = nUSec;
249 253
254 //printf("Starting at %d %d\n", nSec, nUSec );
250 retval = select( nSocket+1, &rfds, NULL, NULL, &tv ); 255 retval = select( nSocket+1, &rfds, NULL, NULL, &tv );
251 256
252 if( pnSecBack ) (*pnSecBack) = tv.tv_sec;
253 if( pnUSecBack ) (*pnUSecBack) = tv.tv_usec;
254
255 if( retval == -1 ) 257 if( retval == -1 )
256 { 258 {
257 // Oh my god!!! some kind of horrible problem!!!! 259 // Oh my god!!! some kind of horrible problem!!!!
@@ -260,7 +262,7 @@ bool Connection::readInput( int nSec, int nUSec, int *pnSecBack, int *pnUSecBack
260 } 262 }
261 else if( retval ) 263 else if( retval )
262 { 264 {
263 printf("retval=%d, nSocket=%d,%d, sec=%d, usec=%d\n", retval, nSocket, FD_ISSET( nSocket, &rfds ), tv.tv_sec, tv.tv_usec ); 265 //printf("retval=%d, nSocket=%d,%d, sec=%d, usec=%d\n", retval, nSocket, FD_ISSET( nSocket, &rfds ), tv.tv_sec, tv.tv_usec );
264 // None of them have data, but the connection is still active. 266 // None of them have data, but the connection is still active.
265 if( readInput() == 0 ) 267 if( readInput() == 0 )
266 { 268 {
@@ -268,10 +270,32 @@ bool Connection::readInput( int nSec, int nUSec, int *pnSecBack, int *pnUSecBack
268 throw ConnectionException( excodeConnectionClosed, "Connection closed"); 270 throw ConnectionException( excodeConnectionClosed, "Connection closed");
269 } 271 }
270 } 272 }
273
274 gettimeofday( &end, &tz );
275
276 int st, ust;
277 st = nSec - ( end.tv_sec - start.tv_sec );
278 if( ( end.tv_usec - start.tv_usec ) > nUSec )
279 {
280 (st)--;
281 ust = 1000000 - (end.tv_usec - start.tv_usec);
282 }
271 else 283 else
272 { 284 {
273 return true; 285 ust = nUSec - (end.tv_usec - start.tv_usec);
274 } 286 }
287
288 if( st < 0 )
289 {
290 st = ust = 0;
291 }
292
293 *pnSecBack = st;
294 *pnUSecBack = ust;
295
296 //printf("New time: %d %d\n", *pnSecBack, *pnUSecBack );
297
298 return true;
275} 299}
276 300
277void Connection::waitForInput( int nBytesIn, int nSec, int nUSec ) 301void Connection::waitForInput( int nBytesIn, int nSec, int nUSec )
diff --git a/src/test/clistress/main.cpp b/src/test/clistress/main.cpp
index 0869945..6b0ac66 100644
--- a/src/test/clistress/main.cpp
+++ b/src/test/clistress/main.cpp
@@ -6,10 +6,12 @@ int main()
6 6
7 c.open("localhost", 4001 ); 7 c.open("localhost", 4001 );
8 8
9 c.appendOutput("d"); 9 c.appendOutput("w");
10 c.writeOutput(); 10 c.writeOutput();
11 11
12 c.waitForInput( 5, 40, 0 ); 12 c.waitForInput( 6, 5, 0 );
13
14 printf("read: %s\n", c.getInput() );
13 15
14 c.close(); 16 c.close();
15 17
diff --git a/src/test/srvstress/main.cpp b/src/test/srvstress/main.cpp
index c7795e4..7fe7657 100644
--- a/src/test/srvstress/main.cpp
+++ b/src/test/srvstress/main.cpp
@@ -13,6 +13,10 @@ public:
13 case 'd': 13 case 'd':
14 throw "Hello"; 14 throw "Hello";
15 break; 15 break;
16
17 case 'w':
18 getConnection()->appendOutput("Hello");
19 break;
16 }; 20 };
17 21
18 return true; 22 return true;