diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-07-29 19:01:02 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-07-29 19:01:02 +0000 |
commit | c2292209eb4ece185f555a5c7823726794fe34cc (patch) | |
tree | 3bad472400717626400238c24057caacb325aac1 | |
parent | ff5688b09c21242c2a0bee70cdfd1ea50b06f4f0 (diff) | |
download | libbu++-c2292209eb4ece185f555a5c7823726794fe34cc.tar.gz libbu++-c2292209eb4ece185f555a5c7823726794fe34cc.tar.bz2 libbu++-c2292209eb4ece185f555a5c7823726794fe34cc.tar.xz libbu++-c2292209eb4ece185f555a5c7823726794fe34cc.zip |
Wow, socket, as it turned out, was not able to close after the remote end
disconnected. It now automatically closes down the local end when the remote
end dies.
Diffstat (limited to '')
-rw-r--r-- | src/server.cpp | 1 | ||||
-rw-r--r-- | src/socket.cpp | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/server.cpp b/src/server.cpp index b7dec41..bfa7880 100644 --- a/src/server.cpp +++ b/src/server.cpp | |||
@@ -92,6 +92,7 @@ void Bu::Server::scan() | |||
92 | if( !pClient->isOpen() ) | 92 | if( !pClient->isOpen() ) |
93 | { | 93 | { |
94 | onClosedConnection( pClient ); | 94 | onClosedConnection( pClient ); |
95 | pClient->close(); | ||
95 | hClients.erase( j ); | 96 | hClients.erase( j ); |
96 | FD_CLR( j, &fdActive ); | 97 | FD_CLR( j, &fdActive ); |
97 | } | 98 | } |
diff --git a/src/socket.cpp b/src/socket.cpp index 46e6cd7..3ddc492 100644 --- a/src/socket.cpp +++ b/src/socket.cpp | |||
@@ -159,7 +159,7 @@ size_t Bu::Socket::read( void *pBuf, size_t nBytes ) | |||
159 | bu_recv( nSocket, (char *) pBuf, nBytes, 0 ) ); | 159 | bu_recv( nSocket, (char *) pBuf, nBytes, 0 ) ); |
160 | if( nRead == 0 ) | 160 | if( nRead == 0 ) |
161 | { | 161 | { |
162 | bActive = false; | 162 | close(); |
163 | throw SocketException( SocketException::cClosed, "Socket closed."); | 163 | throw SocketException( SocketException::cClosed, "Socket closed."); |
164 | } | 164 | } |
165 | if( nRead < 0 ) | 165 | if( nRead < 0 ) |
@@ -171,7 +171,7 @@ size_t Bu::Socket::read( void *pBuf, size_t nBytes ) | |||
171 | #else | 171 | #else |
172 | if( errno == ENETRESET || errno == ECONNRESET ) | 172 | if( errno == ENETRESET || errno == ECONNRESET ) |
173 | { | 173 | { |
174 | bActive = false; | 174 | close(); |
175 | throw SocketException( SocketException::cClosed, | 175 | throw SocketException( SocketException::cClosed, |
176 | strerror(errno) ); | 176 | strerror(errno) ); |
177 | } | 177 | } |