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 | ||