Browse Source

Merge branch 'trac589'

Jelte Jansen 14 years ago
parent
commit
1d88daaa24
1 changed files with 10 additions and 0 deletions
  1. 10 0
      src/lib/asiolink/tcp_server.cc

+ 10 - 0
src/lib/asiolink/tcp_server.cc

@@ -115,6 +115,7 @@ TCPServer::operator()(error_code ec, size_t length) {
         CORO_YIELD async_read(*socket_, asio::buffer(data_.get(),
         CORO_YIELD async_read(*socket_, asio::buffer(data_.get(),
                               TCP_MESSAGE_LENGTHSIZE), *this);
                               TCP_MESSAGE_LENGTHSIZE), *this);
         if (ec) {
         if (ec) {
+            socket_->close();
             CORO_YIELD return;
             CORO_YIELD return;
         }
         }
 
 
@@ -127,6 +128,7 @@ TCPServer::operator()(error_code ec, size_t length) {
         }
         }
 
 
         if (ec) {
         if (ec) {
+            socket_->close();
             CORO_YIELD return;
             CORO_YIELD return;
         }
         }
 
 
@@ -160,6 +162,7 @@ TCPServer::operator()(error_code ec, size_t length) {
         // If we don't have a DNS Lookup provider, there's no point in
         // If we don't have a DNS Lookup provider, there's no point in
         // continuing; we exit the coroutine permanently.
         // continuing; we exit the coroutine permanently.
         if (lookup_callback_ == NULL) {
         if (lookup_callback_ == NULL) {
+            socket_->close();
             CORO_YIELD return;
             CORO_YIELD return;
         }
         }
 
 
@@ -177,6 +180,9 @@ TCPServer::operator()(error_code ec, size_t length) {
         // The 'done_' flag indicates whether we have an answer
         // The 'done_' flag indicates whether we have an answer
         // to send back.  If not, exit the coroutine permanently.
         // to send back.  If not, exit the coroutine permanently.
         if (!done_) {
         if (!done_) {
+            // TODO: should we keep the connection open for a short time
+            // to see if new requests come in?
+            socket_->close();
             CORO_YIELD return;
             CORO_YIELD return;
         }
         }
 
 
@@ -195,6 +201,10 @@ TCPServer::operator()(error_code ec, size_t length) {
         // (though we have nothing further to do, so the coroutine
         // (though we have nothing further to do, so the coroutine
         // will simply exit at that time).
         // will simply exit at that time).
         CORO_YIELD async_write(*socket_, bufs, *this);
         CORO_YIELD async_write(*socket_, bufs, *this);
+        
+        // TODO: should we keep the connection open for a short time
+        // to see if new requests come in?
+        socket_->close();
     }
     }
 }
 }