aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2006-09-26 19:53:41 +0000
committerMike Buland <eichlan@xagasoft.com>2006-09-26 19:53:41 +0000
commit4a2cacc7975b635b32c7cd7c6ac274639477ed8c (patch)
treeac95ac3855ce5df7c7ddbd231107e5ae84143deb
parent25ba18d85897e69cafcf2e2f4772ec693d46c9a0 (diff)
downloadlibbu++-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.
-rw-r--r--src/connection.cpp8
-rw-r--r--src/test/connect/main.cpp38
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
15Connection::Connection() 16Connection::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
7int 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