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
21namespace asio {
22namespace error {
23
24
25namespace detail {
26
27class netdb_category : public asio::error_category
28{
29public:
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
51const asio::error_category& get_netdb_category()
52{
53  static detail::netdb_category instance;
54  return instance;
55}
56
57namespace detail {
58
59class addrinfo_category : public asio::error_category
60{
61public:
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
79const asio::error_category& get_addrinfo_category()
80{
81  static detail::addrinfo_category instance;
82  return instance;
83}
84
85
86namespace detail {
87
88class misc_category : public asio::error_category
89{
90public:
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
112const 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