Home | History | Annotate | Download | only in impl
      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