diff options
author | Mike Buland <eichlan@xagasoft.com> | 2006-09-26 19:53:41 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2006-09-26 19:53:41 +0000 |
commit | 4a2cacc7975b635b32c7cd7c6ac274639477ed8c (patch) | |
tree | ac95ac3855ce5df7c7ddbd231107e5ae84143deb /src | |
parent | 25ba18d85897e69cafcf2e2f4772ec693d46c9a0 (diff) | |
download | libbu++-4a2cacc7975b635b32c7cd7c6ac274639477ed8c.tar.gz libbu++-4a2cacc7975b635b32c7cd7c6ac274639477ed8c.tar.bz2 libbu++-4a2cacc7975b635b32c7cd7c6ac274639477ed8c.tar.xz libbu++-4a2cacc7975b635b32c7cd7c6ac274639477ed8c.zip |
Fixed some whackiness in the connection class, -1 from readInput means nothing
there, but there might be later. 0 means death.
Diffstat (limited to 'src')
-rw-r--r-- | src/connection.cpp | 8 | ||||
-rw-r--r-- | src/test/connect/main.cpp | 38 |
2 files changed, 43 insertions, 3 deletions
diff --git a/src/connection.cpp b/src/connection.cpp index d66ff97..3d3c094 100644 --- a/src/connection.cpp +++ b/src/connection.cpp | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <netinet/in.h> | 10 | #include <netinet/in.h> |
11 | #include <netdb.h> | 11 | #include <netdb.h> |
12 | #include <arpa/inet.h> | 12 | #include <arpa/inet.h> |
13 | #include <errno.h> | ||
13 | #include "exceptions.h" | 14 | #include "exceptions.h" |
14 | 15 | ||
15 | Connection::Connection() | 16 | Connection::Connection() |
@@ -208,15 +209,16 @@ int Connection::readInput() | |||
208 | //memset( buffer, 0, 2048 ); | 209 | //memset( buffer, 0, 2048 ); |
209 | 210 | ||
210 | nbytes = read( nSocket, buffer, 2048 ); | 211 | nbytes = read( nSocket, buffer, 2048 ); |
211 | if (nbytes < 0) | 212 | if( nbytes < 0 && errno != 0 && errno != EAGAIN ) |
212 | { | 213 | { |
214 | printf("errno: %d, %s\n", errno, strerror( errno ) ); | ||
213 | /* Read error. */ | 215 | /* Read error. */ |
214 | //perror("readInput"); | 216 | //perror("readInput"); |
215 | throw ConnectionException( excodeReadError, "Read error"); | 217 | throw ConnectionException( excodeReadError, "Read error: %s", strerror( errno ) ); |
216 | } | 218 | } |
217 | else | 219 | else |
218 | { | 220 | { |
219 | if( nbytes == 0 ) | 221 | if( nbytes <= 0 ) |
220 | break; | 222 | break; |
221 | nTotalRead += nbytes; | 223 | nTotalRead += nbytes; |
222 | appendInput( buffer, nbytes ); | 224 | appendInput( buffer, nbytes ); |
diff --git a/src/test/connect/main.cpp b/src/test/connect/main.cpp new file mode 100644 index 0000000..a9fca64 --- /dev/null +++ b/src/test/connect/main.cpp | |||
@@ -0,0 +1,38 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <unistd.h> | ||
4 | #include <fcntl.h> | ||
5 | #include "connection.h" | ||
6 | |||
7 | int main() | ||
8 | { | ||
9 | Connection c; | ||
10 | c.open("127.0.0.1", 12457 ); | ||
11 | |||
12 | { | ||
13 | int newSocket = c.getSocket(); | ||
14 | int flags; | ||
15 | |||
16 | flags = fcntl(newSocket, F_GETFL, 0); | ||
17 | flags |= O_NONBLOCK; | ||
18 | if (fcntl(newSocket, F_SETFL, flags) < 0) | ||
19 | { | ||
20 | return false; | ||
21 | } | ||
22 | } | ||
23 | |||
24 | for( int i = 0; i < 50; i++ ) | ||
25 | { | ||
26 | usleep( 100000 ); | ||
27 | int nbytes = c.readInput(); | ||
28 | if( nbytes == 0 ) | ||
29 | printf("0 bytes, EOF?\n"); | ||
30 | else | ||
31 | printf("Got %d bytes, whacky...\n", nbytes ); | ||
32 | } | ||
33 | |||
34 | c.close(); | ||
35 | |||
36 | return 0; | ||
37 | } | ||
38 | |||