]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5260] Properly handle EWOULDBLOCK and EAGAIN in Http unit tests.
authorMarcin Siodelski <marcin@isc.org>
Tue, 25 Apr 2017 12:04:10 +0000 (14:04 +0200)
committerMarcin Siodelski <marcin@isc.org>
Tue, 25 Apr 2017 12:04:10 +0000 (14:04 +0200)
src/lib/http/tests/listener_unittests.cc

index 2149a83595c23f0bacbea9b62111fdf2579f2ed2..4ccc0a51eb0ee2fe9c056993dd64dd0239c290bb 100644 (file)
@@ -168,10 +168,21 @@ public:
                            [this, request](const boost::system::error_code& ec,
                                            std::size_t bytes_transferred) mutable {
             if (ec) {
-                ADD_FAILURE() << "error occurred while connecting: "
-                              << ec.message();
-                io_service_.stop();
-                return;
+                if (ec.value() == boost::asio::error::operation_aborted) {
+                    return;
+
+                } else if ((ec.value() == boost::asio::error::try_again) ||
+                           (ec.value() == boost::asio::error::would_block)) {
+                    // If we should try again make sure there is no garbage in the
+                    // bytes_transferred.
+                    bytes_transferred = 0;
+
+                } else {
+                    ADD_FAILURE() << "error occurred while connecting: "
+                                  << ec.message();
+                    io_service_.stop();
+                    return;
+                }
             }
 
             // Remove the part of the request which has been sent.
@@ -199,14 +210,21 @@ public:
                                        std::size_t bytes_transferred) {
             if (ec) {
                 // IO service stopped so simply return.
-                if (ec == boost::asio::error::operation_aborted) {
+                if (ec.value() == boost::asio::error::operation_aborted) {
                     return;
-                }
 
-                // Error occurred, bail...
-                ADD_FAILURE() << "error occurred while receiving HTTP"
-                    " response from the server: " << ec.message();
-                io_service_.stop();
+                } else if ((ec.value() == boost::asio::error::try_again) ||
+                           (ec.value() == boost::asio::error::would_block)) {
+                    // If we should try again, make sure that there is no garbage
+                    // in the bytes_transferred.
+                    bytes_transferred = 0;
+
+                } else {
+                    // Error occurred, bail...
+                    ADD_FAILURE() << "error occurred while receiving HTTP"
+                        " response from the server: " << ec.message();
+                    io_service_.stop();
+                }
             }
 
             if (bytes_transferred > 0) {