1 // 2 // impl/error.ipp 3 // ~~~~~~~~~~~~~~ 4 // 5 // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 // 7 // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 // 10 11 #ifndef ASIO_IMPL_ERROR_IPP 12 #define ASIO_IMPL_ERROR_IPP 13 14 15 #include "asio/detail/config.hpp" 16 #include <string> 17 #include "asio/error.hpp" 18 19 #include "asio/detail/push_options.hpp" 20 21 namespace asio { 22 namespace error { 23 24 25 namespace detail { 26 27 class netdb_category : public asio::error_category 28 { 29 public: 30 const char* name() const ASIO_ERROR_CATEGORY_NOEXCEPT 31 { 32 return "asio.netdb"; 33 } 34 35 std::string message(int value) const 36 { 37 if (value == error::host_not_found) 38 return "Host not found (authoritative)"; 39 if (value == error::host_not_found_try_again) 40 return "Host not found (non-authoritative), try again later"; 41 if (value == error::no_data) 42 return "The query is valid, but it does not have associated data"; 43 if (value == error::no_recovery) 44 return "A non-recoverable error occurred during database lookup"; 45 return "asio.netdb error"; 46 } 47 }; 48 49 } // namespace detail 50 51 const asio::error_category& get_netdb_category() 52 { 53 static detail::netdb_category instance; 54 return instance; 55 } 56 57 namespace detail { 58 59 class addrinfo_category : public asio::error_category 60 { 61 public: 62 const char* name() const ASIO_ERROR_CATEGORY_NOEXCEPT 63 { 64 return "asio.addrinfo"; 65 } 66 67 std::string message(int value) const 68 { 69 if (value == error::service_not_found) 70 return "Service not found"; 71 if (value == error::socket_type_not_supported) 72 return "Socket type not supported"; 73 return "asio.addrinfo error"; 74 } 75 }; 76 77 } // namespace detail 78 79 const asio::error_category& get_addrinfo_category() 80 { 81 static detail::addrinfo_category instance; 82 return instance; 83 } 84 85 86 namespace detail { 87 88 class misc_category : public asio::error_category 89 { 90 public: 91 const char* name() const ASIO_ERROR_CATEGORY_NOEXCEPT 92 { 93 return "asio.misc"; 94 } 95 96 std::string message(int value) const 97 { 98 if (value == error::already_open) 99 return "Already open"; 100 if (value == error::eof) 101 return "End of file"; 102 if (value == error::not_found) 103 return "Element not found"; 104 if (value == error::fd_set_failure) 105 return "The descriptor does not fit into the select call's fd_set"; 106 return "asio.misc error"; 107 } 108 }; 109 110 } // namespace detail 111 112 const asio::error_category& get_misc_category() 113 { 114 static detail::misc_category instance; 115 return instance; 116 } 117 118 } // namespace error 119 } // namespace asio 120 121 #include "asio/detail/pop_options.hpp" 122 123 #endif // ASIO_IMPL_ERROR_IPP 124