diff options
| -rw-r--r-- | build.conf | 3 | ||||
| -rw-r--r-- | src/exceptionbase.h | 2 | ||||
| -rw-r--r-- | src/plugger.h | 4 | ||||
| -rw-r--r-- | src/socket.cpp | 23 | ||||
| -rw-r--r-- | src/socket.h | 3 | ||||
| -rw-r--r-- | src/tests/fstrstd.cpp | 9 | ||||
| -rw-r--r-- | src/tests/socketblock.cpp | 50 |
7 files changed, 85 insertions, 9 deletions
| @@ -39,7 +39,8 @@ filesIn("src/tests") filter regexp("^src/tests/(.*)\\.cpp$", "tests/{re:1}"): | |||
| 39 | set "LDFLAGS" += "-L. -lbu++", | 39 | set "LDFLAGS" += "-L. -lbu++", |
| 40 | input "src/{target}.cpp" | 40 | input "src/{target}.cpp" |
| 41 | 41 | ||
| 42 | ["tests/itoqueue1", "tests/itoqueue2"]: set "LDFLAGS" += "-lpthread" | 42 | ["tests/itoqueue1", "tests/itoqueue2", "tests/socketblock"]: |
| 43 | set "LDFLAGS" += "-lpthread" | ||
| 43 | 44 | ||
| 44 | filesIn("src/unit") filter regexp("^src/unit/(.*)\\.cpp$", "unit/{re:1}"): | 45 | filesIn("src/unit") filter regexp("^src/unit/(.*)\\.cpp$", "unit/{re:1}"): |
| 45 | rule "exe", | 46 | rule "exe", |
diff --git a/src/exceptionbase.h b/src/exceptionbase.h index 33e79b2..0a251e4 100644 --- a/src/exceptionbase.h +++ b/src/exceptionbase.h | |||
| @@ -81,7 +81,7 @@ namespace Bu | |||
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | #define subExceptionDecl( name ) \ | 83 | #define subExceptionDecl( name ) \ |
| 84 | class name : public Bu::ExceptionBase \ | 84 | class name : public Bu::ExceptionBase \ |
| 85 | { \ | 85 | { \ |
| 86 | public: \ | 86 | public: \ |
| 87 | name( const char *sFormat, ... ) throw (); \ | 87 | name( const char *sFormat, ... ) throw (); \ |
diff --git a/src/plugger.h b/src/plugger.h index 2124b7a..88628a9 100644 --- a/src/plugger.h +++ b/src/plugger.h | |||
| @@ -158,9 +158,7 @@ namespace Bu | |||
| 158 | 158 | ||
| 159 | bool hasPlugin( const char *lpName ) | 159 | bool hasPlugin( const char *lpName ) |
| 160 | { | 160 | { |
| 161 | if( hPlugin[lpName] == NULL ) | 161 | return hPlugin.has( lpName ); |
| 162 | return false; | ||
| 163 | return true; | ||
| 164 | } | 162 | } |
| 165 | 163 | ||
| 166 | void destroy( T *pPlug ) | 164 | void destroy( T *pPlug ) |
diff --git a/src/socket.cpp b/src/socket.cpp index e567061..221d4c2 100644 --- a/src/socket.cpp +++ b/src/socket.cpp | |||
| @@ -174,9 +174,26 @@ size_t Bu::Socket::read( void *pBuf, size_t nBytes ) | |||
| 174 | return nRead; | 174 | return nRead; |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | //size_t Bu::Socket::read( void *pBuf, size_t nBytes, uint32_t nTimeout ) | 177 | size_t Bu::Socket::read( void *pBuf, size_t nBytes, |
| 178 | //{ | 178 | uint32_t nSec, uint32_t nUSec ) |
| 179 | //} | 179 | { |
| 180 | fd_set rfds; | ||
| 181 | FD_ZERO(&rfds); | ||
| 182 | FD_SET(nSocket, &rfds); | ||
| 183 | struct timeval tv = { nSec, nUSec }; | ||
| 184 | int retval = select( nSocket+1, &rfds, NULL, NULL, &tv ); | ||
| 185 | if( retval == -1 ) | ||
| 186 | throw ConnectionException( | ||
| 187 | excodeBadReadError, | ||
| 188 | "Bad Read error" | ||
| 189 | ); | ||
| 190 | if( !FD_ISSET( nSocket, &rfds ) ) | ||
| 191 | throw ConnectionException( | ||
| 192 | excodeSocketTimeout, | ||
| 193 | "Socket timout on read" | ||
| 194 | ); | ||
| 195 | return read( pBuf, nBytes ); | ||
| 196 | } | ||
| 180 | 197 | ||
| 181 | size_t Bu::Socket::write( const void *pBuf, size_t nBytes ) | 198 | size_t Bu::Socket::write( const void *pBuf, size_t nBytes ) |
| 182 | { | 199 | { |
diff --git a/src/socket.h b/src/socket.h index c291549..9f82456 100644 --- a/src/socket.h +++ b/src/socket.h | |||
| @@ -21,7 +21,8 @@ namespace Bu | |||
| 21 | virtual void close(); | 21 | virtual void close(); |
| 22 | //virtual void read(); | 22 | //virtual void read(); |
| 23 | virtual size_t read( void *pBuf, size_t nBytes ); | 23 | virtual size_t read( void *pBuf, size_t nBytes ); |
| 24 | virtual size_t read( void *pBuf, size_t nBytes, uint32_t nTimeout ); | 24 | virtual size_t read( void *pBuf, size_t nBytes, |
| 25 | uint32_t nSec, uint32_t nUSec=0 ); | ||
| 25 | virtual size_t write( const void *pBuf, size_t nBytes ); | 26 | virtual size_t write( const void *pBuf, size_t nBytes ); |
| 26 | 27 | ||
| 27 | virtual long tell(); | 28 | virtual long tell(); |
diff --git a/src/tests/fstrstd.cpp b/src/tests/fstrstd.cpp new file mode 100644 index 0000000..8dffcb6 --- /dev/null +++ b/src/tests/fstrstd.cpp | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #include <iostream> | ||
| 2 | #include "bu/fstring.h" | ||
| 3 | |||
| 4 | int main() | ||
| 5 | { | ||
| 6 | Bu::FString s("Hey there, dude.\n"); | ||
| 7 | |||
| 8 | std::cout << s << 5; | ||
| 9 | } | ||
diff --git a/src/tests/socketblock.cpp b/src/tests/socketblock.cpp new file mode 100644 index 0000000..443b07e --- /dev/null +++ b/src/tests/socketblock.cpp | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | #include "bu/ito.h" | ||
| 2 | #include "bu/socket.h" | ||
| 3 | #include "bu/serversocket.h" | ||
| 4 | #include <stdio.h> | ||
| 5 | |||
| 6 | class TstServer : public Bu::Ito | ||
| 7 | { | ||
| 8 | public: | ||
| 9 | TstServer() : | ||
| 10 | s( 55678 ) | ||
| 11 | { | ||
| 12 | } | ||
| 13 | |||
| 14 | virtual void *run() | ||
| 15 | { | ||
| 16 | Bu::Socket c = s.accept( 45, 0 ); | ||
| 17 | printf("TstServer: Accetped connection.\n"); fflush( stdout ); | ||
| 18 | |||
| 19 | sleep( 1 ); | ||
| 20 | printf("TstServer: Trying to read 10 bytes...\n"); fflush( stdout ); | ||
| 21 | |||
| 22 | char buf[10]; | ||
| 23 | size_t nRead = c.read( buf, 10 ); | ||
| 24 | printf("TstServer: Got %d bytes...\n", nRead ); fflush( stdout ); | ||
| 25 | |||
| 26 | printf("TstServer: Closing connection...\n"); fflush( stdout ); | ||
| 27 | c.close(); | ||
| 28 | |||
| 29 | return NULL; | ||
| 30 | } | ||
| 31 | |||
| 32 | Bu::ServerSocket s; | ||
| 33 | }; | ||
| 34 | |||
| 35 | int main() | ||
| 36 | { | ||
| 37 | TstServer ts; | ||
| 38 | |||
| 39 | ts.start(); | ||
| 40 | |||
| 41 | printf("main: Connecting to server.\n"); fflush( stdout ); | ||
| 42 | Bu::Socket s( "localhost", 55678 ); | ||
| 43 | |||
| 44 | printf("main: Sending 4 bytes.\n"); fflush( stdout ); | ||
| 45 | s.write( "aoeu", 4 ); | ||
| 46 | |||
| 47 | printf("main: Sleeping 10 seconds for good measure.\n"); fflush( stdout ); | ||
| 48 | sleep( 10 ); | ||
| 49 | } | ||
| 50 | |||
