Treat multicast test failures with ENODEV as non-fatal.
diff --git a/asio/include/asio/error.hpp b/asio/include/asio/error.hpp index 6f5dff2..e03d534 100644 --- a/asio/include/asio/error.hpp +++ b/asio/include/asio/error.hpp
@@ -146,6 +146,11 @@ /// Protocol not available. no_protocol_option = ASIO_SOCKET_ERROR(ENOPROTOOPT), + /// No such device. + no_such_device = ASIO_WIN_OR_POSIX( + ASIO_NATIVE_ERROR(ERROR_BAD_UNIT), + ASIO_NATIVE_ERROR(ENODEV)), + /// Transport endpoint is not connected. not_connected = ASIO_SOCKET_ERROR(ENOTCONN),
diff --git a/asio/include/asio/impl/error_code.ipp b/asio/include/asio/impl/error_code.ipp index a9d7d8a..7472264 100644 --- a/asio/include/asio/impl/error_code.ipp +++ b/asio/include/asio/impl/error_code.ipp
@@ -168,6 +168,8 @@ return std::errc::operation_not_permitted; case no_protocol_option: return std::errc::no_protocol_option; + case no_such_device: + return std::errc::no_such_device; case not_connected: return std::errc::not_connected; case not_socket:
diff --git a/asio/src/tests/unit/ip/multicast.cpp b/asio/src/tests/unit/ip/multicast.cpp index 019b957..53b8e52 100644 --- a/asio/src/tests/unit/ip/multicast.cpp +++ b/asio/src/tests/unit/ip/multicast.cpp
@@ -165,30 +165,34 @@ { ip::multicast::join_group join_group(multicast_address_v4); sock_v4.set_option(join_group, ec); - ASIO_CHECK_MESSAGE(!ec, ec.value() << ", " << ec.message()); + ASIO_CHECK_MESSAGE(!ec || ec == error::no_such_device, + ec.value() << ", " << ec.message()); + + if (!ec) + { + // leave_group class. + + ip::multicast::leave_group leave_group(multicast_address_v4); + sock_v4.set_option(leave_group, ec); + ASIO_CHECK_MESSAGE(!ec, ec.value() << ", " << ec.message()); + } } if (have_v6) { ip::multicast::join_group join_group(multicast_address_v6); sock_v6.set_option(join_group, ec); - ASIO_CHECK_MESSAGE(!ec, ec.value() << ", " << ec.message()); - } + ASIO_CHECK_MESSAGE(!ec || ec == error::no_such_device, + ec.value() << ", " << ec.message()); - // leave_group class. + if (!ec) + { + // leave_group class. - if (have_v4) - { - ip::multicast::leave_group leave_group(multicast_address_v4); - sock_v4.set_option(leave_group, ec); - ASIO_CHECK_MESSAGE(!ec, ec.value() << ", " << ec.message()); - } - - if (have_v6) - { - ip::multicast::leave_group leave_group(multicast_address_v6); - sock_v6.set_option(leave_group, ec); - ASIO_CHECK_MESSAGE(!ec, ec.value() << ", " << ec.message()); + ip::multicast::leave_group leave_group(multicast_address_v6); + sock_v6.set_option(leave_group, ec); + ASIO_CHECK_MESSAGE(!ec, ec.value() << ", " << ec.message()); + } } // outbound_interface class.