diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-03-26 17:00:35 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-03-26 17:00:35 +0000 |
commit | b4ab27db8a97f0a56a61bd56480cfbe08a1f3399 (patch) | |
tree | 83c984b68f10099deac2e9536227a96cc416e39b /src | |
parent | 94fff060ee9ec6c2a8da75568702d8e944963d46 (diff) | |
download | libbu++-b4ab27db8a97f0a56a61bd56480cfbe08a1f3399.tar.gz libbu++-b4ab27db8a97f0a56a61bd56480cfbe08a1f3399.tar.bz2 libbu++-b4ab27db8a97f0a56a61bd56480cfbe08a1f3399.tar.xz libbu++-b4ab27db8a97f0a56a61bd56480cfbe08a1f3399.zip |
Added some more constructors to the ServerSocket, and also switched the write
function in Bu::Formatter to take a void *, what was I thinking?
Diffstat (limited to 'src')
-rw-r--r-- | src/formatter.cpp | 2 | ||||
-rw-r--r-- | src/formatter.h | 2 | ||||
-rw-r--r-- | src/serversocket.cpp | 37 | ||||
-rw-r--r-- | src/serversocket.h | 3 |
4 files changed, 40 insertions, 4 deletions
diff --git a/src/formatter.cpp b/src/formatter.cpp index 6eb3b86..2fadd96 100644 --- a/src/formatter.cpp +++ b/src/formatter.cpp | |||
@@ -16,7 +16,7 @@ void Bu::Formatter::write( const Bu::FString &sStr ) | |||
16 | rOut.write( sStr ); | 16 | rOut.write( sStr ); |
17 | } | 17 | } |
18 | 18 | ||
19 | void Bu::Formatter::write( const char *sStr, int iLen ) | 19 | void Bu::Formatter::write( const void *sStr, int iLen ) |
20 | { | 20 | { |
21 | rOut.write( sStr, iLen ); | 21 | rOut.write( sStr, iLen ); |
22 | } | 22 | } |
diff --git a/src/formatter.h b/src/formatter.h index 693c3ed..5dd7622 100644 --- a/src/formatter.h +++ b/src/formatter.h | |||
@@ -83,7 +83,7 @@ namespace Bu | |||
83 | } Fmt; | 83 | } Fmt; |
84 | 84 | ||
85 | void write( const Bu::FString &sStr ); | 85 | void write( const Bu::FString &sStr ); |
86 | void write( const char *sStr, int iLen ); | 86 | void write( const void *sStr, int iLen ); |
87 | void writeAligned( const Bu::FString &sStr ); | 87 | void writeAligned( const Bu::FString &sStr ); |
88 | void writeAligned( const char *sStr, int iLen ); | 88 | void writeAligned( const char *sStr, int iLen ); |
89 | 89 | ||
diff --git a/src/serversocket.cpp b/src/serversocket.cpp index 89fef7e..b3a8c2d 100644 --- a/src/serversocket.cpp +++ b/src/serversocket.cpp | |||
@@ -65,9 +65,37 @@ Bu::ServerSocket::ServerSocket(const FString &sAddr,int nPort, int nPoolSize) : | |||
65 | startServer( name, nPoolSize ); | 65 | startServer( name, nPoolSize ); |
66 | } | 66 | } |
67 | 67 | ||
68 | Bu::ServerSocket::ServerSocket( int nServer, bool bInit, int nPoolSize ) : | ||
69 | nServer( nServer ), | ||
70 | nPort( 0 ) | ||
71 | { | ||
72 | if( bInit ) | ||
73 | { | ||
74 | struct sockaddr name; | ||
75 | socklen_t namelen = sizeof(name); | ||
76 | getpeername( nServer, &name, &namelen ); | ||
77 | |||
78 | initServer( *((sockaddr_in *)&name), nPoolSize ); | ||
79 | } | ||
80 | else | ||
81 | { | ||
82 | FD_ZERO( &fdActive ); | ||
83 | FD_SET( nServer, &fdActive ); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | Bu::ServerSocket::ServerSocket( const ServerSocket &rSrc ) | ||
88 | { | ||
89 | nServer = dup( rSrc.nServer ); | ||
90 | nPort = rSrc.nPort; | ||
91 | FD_ZERO( &fdActive ); | ||
92 | FD_SET( nServer, &fdActive ); | ||
93 | } | ||
94 | |||
68 | Bu::ServerSocket::~ServerSocket() | 95 | Bu::ServerSocket::~ServerSocket() |
69 | { | 96 | { |
70 | ::close( nServer ); | 97 | if( nServer > -1 ) |
98 | ::close( nServer ); | ||
71 | } | 99 | } |
72 | 100 | ||
73 | void Bu::ServerSocket::startServer( struct sockaddr_in &name, int nPoolSize ) | 101 | void Bu::ServerSocket::startServer( struct sockaddr_in &name, int nPoolSize ) |
@@ -79,7 +107,7 @@ void Bu::ServerSocket::startServer( struct sockaddr_in &name, int nPoolSize ) | |||
79 | { | 107 | { |
80 | throw Bu::ServerSocketException("Couldn't create a listen socket."); | 108 | throw Bu::ServerSocketException("Couldn't create a listen socket."); |
81 | } | 109 | } |
82 | 110 | ||
83 | int opt = 1; | 111 | int opt = 1; |
84 | bu_setsockopt( | 112 | bu_setsockopt( |
85 | nServer, | 113 | nServer, |
@@ -89,6 +117,11 @@ void Bu::ServerSocket::startServer( struct sockaddr_in &name, int nPoolSize ) | |||
89 | sizeof( opt ) | 117 | sizeof( opt ) |
90 | ); | 118 | ); |
91 | 119 | ||
120 | initServer( name, nPoolSize ); | ||
121 | } | ||
122 | |||
123 | void Bu::ServerSocket::initServer( struct sockaddr_in &name, int nPoolSize ) | ||
124 | { | ||
92 | if( bu_bind( nServer, (struct sockaddr *) &name, sizeof(name) ) < 0 ) | 125 | if( bu_bind( nServer, (struct sockaddr *) &name, sizeof(name) ) < 0 ) |
93 | { | 126 | { |
94 | throw Bu::ServerSocketException("Couldn't bind to the listen socket."); | 127 | throw Bu::ServerSocketException("Couldn't bind to the listen socket."); |
diff --git a/src/serversocket.h b/src/serversocket.h index 0860972..88d09ec 100644 --- a/src/serversocket.h +++ b/src/serversocket.h | |||
@@ -39,6 +39,8 @@ namespace Bu | |||
39 | public: | 39 | public: |
40 | ServerSocket( int nPort, int nPoolSize=40 ); | 40 | ServerSocket( int nPort, int nPoolSize=40 ); |
41 | ServerSocket( const FString &sAddr, int nPort, int nPoolSize=40 ); | 41 | ServerSocket( const FString &sAddr, int nPort, int nPoolSize=40 ); |
42 | ServerSocket( int nSocket, bool bInit, int nPoolSize=40 ); | ||
43 | ServerSocket( const ServerSocket &rSrc ); | ||
42 | virtual ~ServerSocket(); | 44 | virtual ~ServerSocket(); |
43 | 45 | ||
44 | int accept( int nTimeoutSec=0, int nTimeoutUSec=0 ); | 46 | int accept( int nTimeoutSec=0, int nTimeoutUSec=0 ); |
@@ -47,6 +49,7 @@ namespace Bu | |||
47 | 49 | ||
48 | private: | 50 | private: |
49 | void startServer( struct sockaddr_in &name, int nPoolSize ); | 51 | void startServer( struct sockaddr_in &name, int nPoolSize ); |
52 | void initServer( struct sockaddr_in &name, int nPoolSize ); | ||
50 | 53 | ||
51 | fd_set fdActive; | 54 | fd_set fdActive; |
52 | #ifdef WIN32 | 55 | #ifdef WIN32 |