Browse Source

[trac678] merge code from ticket 657

hanfeng 14 years ago
parent
commit
a32e082284
2 changed files with 21 additions and 8 deletions
  1. 12 4
      src/lib/asiolink/tcp_server.cc
  2. 9 4
      src/lib/asiolink/udp_server.cc

+ 12 - 4
src/lib/asiolink/tcp_server.cc

@@ -81,10 +81,18 @@ TCPServer::operator()(error_code ec, size_t length) {
             /// try again
             do {
                 CORO_YIELD acceptor_->async_accept(*socket_, *this);
-                /// If user stop the server which will close the acceptor
-                /// we just return
-                if (ec == asio::error::bad_descriptor)
-                    CORO_YIELD return;
+
+                // return if we meet fatal error
+                // Todo add log
+                if (ec) {
+                    using namespace asio::error;
+                    if (ec.value() != would_block && ec.value() != try_again &&
+                            ec.value() != connection_aborted &&
+                            ec.value() != interrupted) {
+                        return;
+                    }
+                }
+
 
             } while (ec);
 

+ 9 - 4
src/lib/asiolink/udp_server.cc

@@ -188,10 +188,15 @@ UDPServer::operator()(error_code ec, size_t length) {
                     buffer(data_->data_.get(), MAX_LENGTH), *data_->sender_,
                     *this);
 
-                // If the server is stopped which will close the socket, 
-                // we just return
-                if (ec == asio::error::bad_descriptor)
-                    CORO_YIELD return;
+                //return if we met fatal error
+                //Todo add log
+                if (ec) {
+                    using namespace asio::error;
+                    if (ec.value() != would_block && ec.value() != try_again &&
+                            ec.value() != interrupted) {
+                        return;
+                    }
+                }
 
             } while (ec || length == 0);