diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2007-04-02 17:35:41 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2007-04-02 17:35:41 +0000 |
| commit | a8e7b44c9981dd5d65b0b97f1d2ee34927a0f2a5 (patch) | |
| tree | 1aeb8bc05b80648a504937ea2ab990c6958cf7aa | |
| parent | cc4604c1e22e01c31d25923ed76d1518693b7faa (diff) | |
| download | libbu++-a8e7b44c9981dd5d65b0b97f1d2ee34927a0f2a5.tar.gz libbu++-a8e7b44c9981dd5d65b0b97f1d2ee34927a0f2a5.tar.bz2 libbu++-a8e7b44c9981dd5d65b0b97f1d2ee34927a0f2a5.tar.xz libbu++-a8e7b44c9981dd5d65b0b97f1d2ee34927a0f2a5.zip | |
Ok...now you can specify a timeout on the open function, 30 seconds is the
default so no programs need to be changed, it seemed like a good default to
me...
Still needs testing, but it should work just fine, and shouldn't effect any of
our servers.
| -rw-r--r-- | src/connection.cpp | 38 | ||||
| -rw-r--r-- | src/connection.h | 2 |
2 files changed, 33 insertions, 7 deletions
diff --git a/src/connection.cpp b/src/connection.cpp index 9d8b02c..efef144 100644 --- a/src/connection.cpp +++ b/src/connection.cpp | |||
| @@ -165,7 +165,7 @@ bool Connection::open( int nNewSocket ) | |||
| 165 | return true; | 165 | return true; |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | bool Connection::open( const char *sAddr, int nPort ) | 168 | bool Connection::open( const char *sAddr, int nPort, int nSec ) |
| 169 | { | 169 | { |
| 170 | struct sockaddr_in xServerName; | 170 | struct sockaddr_in xServerName; |
| 171 | bActive = false; | 171 | bActive = false; |
| @@ -204,13 +204,42 @@ bool Connection::open( const char *sAddr, int nPort ) | |||
| 204 | } | 204 | } |
| 205 | 205 | ||
| 206 | //printf("Making actual connection..."); | 206 | //printf("Making actual connection..."); |
| 207 | fflush( stdout ); | 207 | //fflush( stdout ); |
| 208 | int ret = connect( | 208 | connect( |
| 209 | nSocket, | 209 | nSocket, |
| 210 | (struct sockaddr *)&xServerName, | 210 | (struct sockaddr *)&xServerName, |
| 211 | sizeof(xServerName) | 211 | sizeof(xServerName) |
| 212 | ); | 212 | ); |
| 213 | //printf("Connected.\n"); | 213 | //printf("Connected.\n"); |
| 214 | |||
| 215 | bActive = true; | ||
| 216 | bDisconnectMe = false; | ||
| 217 | |||
| 218 | if( nSec > 0 ) | ||
| 219 | { | ||
| 220 | fd_set rfds, wfds, efds; | ||
| 221 | int retval; | ||
| 222 | |||
| 223 | FD_ZERO(&rfds); | ||
| 224 | FD_SET(nSocket, &rfds); | ||
| 225 | FD_ZERO(&wfds); | ||
| 226 | FD_SET(nSocket, &wfds); | ||
| 227 | FD_ZERO(&efds); | ||
| 228 | FD_SET(nSocket, &efds); | ||
| 229 | |||
| 230 | struct timeval tv; | ||
| 231 | tv.tv_sec = nSec; | ||
| 232 | tv.tv_usec = 0; | ||
| 233 | |||
| 234 | retval = select( nSocket+1, &rfds, &wfds, &efds, &tv ); | ||
| 235 | |||
| 236 | if( retval == 0 ) | ||
| 237 | { | ||
| 238 | close(); | ||
| 239 | throw ExceptionBase("Connection timeout.\n"); | ||
| 240 | } | ||
| 241 | |||
| 242 | } | ||
| 214 | 243 | ||
| 215 | /* | 244 | /* |
| 216 | if( ret < 0 ) | 245 | if( ret < 0 ) |
| @@ -218,9 +247,6 @@ bool Connection::open( const char *sAddr, int nPort ) | |||
| 218 | return false; | 247 | return false; |
| 219 | }*/ | 248 | }*/ |
| 220 | 249 | ||
| 221 | bActive = true; | ||
| 222 | bDisconnectMe = false; | ||
| 223 | |||
| 224 | return true; | 250 | return true; |
| 225 | } | 251 | } |
| 226 | 252 | ||
diff --git a/src/connection.h b/src/connection.h index 7e1141d..0e991c7 100644 --- a/src/connection.h +++ b/src/connection.h | |||
| @@ -49,7 +49,7 @@ public: | |||
| 49 | *@todo Make this function add log entries to a standard MultiLog if | 49 | *@todo Make this function add log entries to a standard MultiLog if |
| 50 | * something goes wrong. | 50 | * something goes wrong. |
| 51 | */ | 51 | */ |
| 52 | bool open( const char *sAddr, int nPort ); | 52 | bool open( const char *sAddr, int nPort, int nSec=30 ); |
| 53 | 53 | ||
| 54 | void ensureCapacity( int nSize ); | 54 | void ensureCapacity( int nSize ); |
| 55 | 55 | ||
