diff options
Diffstat (limited to 'src/connection.cpp')
-rw-r--r-- | src/connection.cpp | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/src/connection.cpp b/src/connection.cpp index 0e7f111..045ea17 100644 --- a/src/connection.cpp +++ b/src/connection.cpp | |||
@@ -196,7 +196,7 @@ bool Connection::open( const char *sAddr, int nPort ) | |||
196 | return true; | 196 | return true; |
197 | } | 197 | } |
198 | 198 | ||
199 | bool Connection::readInput() | 199 | int Connection::readInput() |
200 | { | 200 | { |
201 | char buffer[2048]; | 201 | char buffer[2048]; |
202 | int nbytes; | 202 | int nbytes; |
@@ -204,39 +204,33 @@ bool Connection::readInput() | |||
204 | 204 | ||
205 | for(;;) | 205 | for(;;) |
206 | { | 206 | { |
207 | memset( buffer, 0, 2048 ); | 207 | //memset( buffer, 0, 2048 ); |
208 | 208 | ||
209 | nbytes = read( nSocket, buffer, 2048 ); | 209 | nbytes = read( nSocket, buffer, 2048 ); |
210 | if (nbytes < 0) | 210 | if (nbytes < 0) |
211 | { | 211 | { |
212 | /* Read error. */ | 212 | /* Read error. */ |
213 | //perror("readInput"); | 213 | //perror("readInput"); |
214 | return false; | 214 | throw ConnectionException( excodeReadError, "Read error"); |
215 | } | ||
216 | else if (nbytes == 0) | ||
217 | { | ||
218 | /* End-of-file. */ | ||
219 | //perror("readInput"); | ||
220 | return false; | ||
221 | } | 215 | } |
222 | else | 216 | else |
223 | { | 217 | { |
224 | nTotalRead += nbytes; | 218 | nTotalRead += nbytes; |
225 | appendInput( buffer, nbytes ); | 219 | appendInput( buffer, nbytes ); |
226 | /* Data read. */ | 220 | /* Data read. */ |
227 | if( nbytes < 2047 ) | 221 | if( nbytes < 2048 ) |
228 | { | 222 | { |
229 | if( pProtocol != NULL && nTotalRead > 0 ) | 223 | break; |
230 | { | ||
231 | pProtocol->onNewData(); | ||
232 | } | ||
233 | |||
234 | return true; | ||
235 | } | 224 | } |
236 | } | 225 | } |
237 | } | 226 | } |
238 | 227 | ||
239 | return true; | 228 | if( pProtocol != NULL && nTotalRead > 0 ) |
229 | { | ||
230 | pProtocol->onNewData(); | ||
231 | } | ||
232 | |||
233 | return nTotalRead; | ||
240 | } | 234 | } |
241 | 235 | ||
242 | bool Connection::readInput( int nSec, int nUSec, int *pnSecBack, int *pnUSecBack ) | 236 | bool Connection::readInput( int nSec, int nUSec, int *pnSecBack, int *pnUSecBack ) |
@@ -259,12 +253,17 @@ bool Connection::readInput( int nSec, int nUSec, int *pnSecBack, int *pnUSecBack | |||
259 | if( retval == -1 ) | 253 | if( retval == -1 ) |
260 | { | 254 | { |
261 | // Oh my god!!! some kind of horrible problem!!!! | 255 | // Oh my god!!! some kind of horrible problem!!!! |
256 | throw ConnectionException( excodeBadReadError, "Bad Read error"); | ||
262 | return false; | 257 | return false; |
263 | } | 258 | } |
264 | else if( retval ) | 259 | else if( retval ) |
265 | { | 260 | { |
266 | // None of them have data, but the connection is still active. | 261 | // None of them have data, but the connection is still active. |
267 | return readInput(); | 262 | if( readInput() == 0 ) |
263 | { | ||
264 | this->close(); | ||
265 | throw ConnectionException( excodeConnectionClosed, "Connection closed"); | ||
266 | } | ||
268 | } | 267 | } |
269 | else | 268 | else |
270 | { | 269 | { |
@@ -283,7 +282,7 @@ void Connection::waitForInput( int nBytesIn, int nSec, int nUSec ) | |||
283 | { | 282 | { |
284 | if( nSec == 0 && nUSec == 0 ) | 283 | if( nSec == 0 && nUSec == 0 ) |
285 | { | 284 | { |
286 | throw ConnectionException("Socket Timeout"); | 285 | throw ConnectionException( excodeSocketTimeout, "Socket Timeout"); |
287 | } | 286 | } |
288 | readInput( nSec, nUSec, &nSec, &nUSec ); | 287 | readInput( nSec, nUSec, &nSec, &nUSec ); |
289 | rlen = getInputAmnt(); | 288 | rlen = getInputAmnt(); |