00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ASIO_ERROR_HPP
00012 #define ASIO_ERROR_HPP
00013
00014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00015 # pragma once
00016 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
00017
00018 #include "asio/detail/push_options.hpp"
00019
00020 #include "asio/detail/push_options.hpp"
00021 #include <cerrno>
00022 #include <boost/config.hpp>
00023 #include "asio/detail/pop_options.hpp"
00024
00025 #include "asio/error_code.hpp"
00026 #include "asio/detail/socket_types.hpp"
00027
00028 #if defined(GENERATING_DOCUMENTATION)
00029
00030 # define ASIO_NATIVE_ERROR(e) implementation_defined
00031
00032 # define ASIO_SOCKET_ERROR(e) implementation_defined
00033
00034 # define ASIO_NETDB_ERROR(e) implementation_defined
00035
00036 # define ASIO_GETADDRINFO_ERROR(e) implementation_defined
00037
00038 # define ASIO_WIN_OR_POSIX(e_win, e_posix) implementation_defined
00039 #elif defined(BOOST_WINDOWS) || defined(__CYGWIN__)
00040 # define ASIO_NATIVE_ERROR(e) e
00041 # define ASIO_SOCKET_ERROR(e) WSA ## e
00042 # define ASIO_NETDB_ERROR(e) WSA ## e
00043 # define ASIO_GETADDRINFO_ERROR(e) WSA ## e
00044 # define ASIO_WIN_OR_POSIX(e_win, e_posix) e_win
00045 #else
00046 # define ASIO_NATIVE_ERROR(e) e
00047 # define ASIO_SOCKET_ERROR(e) e
00048 # define ASIO_NETDB_ERROR(e) e
00049 # define ASIO_GETADDRINFO_ERROR(e) e
00050 # define ASIO_WIN_OR_POSIX(e_win, e_posix) e_posix
00051 #endif
00052
00053 namespace asio {
00054 namespace error {
00055
00056 enum basic_errors
00057 {
00059 access_denied = ASIO_SOCKET_ERROR(EACCES),
00060
00062 address_family_not_supported = ASIO_SOCKET_ERROR(EAFNOSUPPORT),
00063
00065 address_in_use = ASIO_SOCKET_ERROR(EADDRINUSE),
00066
00068 already_connected = ASIO_SOCKET_ERROR(EISCONN),
00069
00071 already_started = ASIO_SOCKET_ERROR(EALREADY),
00072
00074 broken_pipe = ASIO_WIN_OR_POSIX(
00075 ASIO_NATIVE_ERROR(ERROR_BROKEN_PIPE),
00076 ASIO_NATIVE_ERROR(EPIPE)),
00077
00079 connection_aborted = ASIO_SOCKET_ERROR(ECONNABORTED),
00080
00082 connection_refused = ASIO_SOCKET_ERROR(ECONNREFUSED),
00083
00085 connection_reset = ASIO_SOCKET_ERROR(ECONNRESET),
00086
00088 bad_descriptor = ASIO_SOCKET_ERROR(EBADF),
00089
00091 fault = ASIO_SOCKET_ERROR(EFAULT),
00092
00094 host_unreachable = ASIO_SOCKET_ERROR(EHOSTUNREACH),
00095
00097 in_progress = ASIO_SOCKET_ERROR(EINPROGRESS),
00098
00100 interrupted = ASIO_SOCKET_ERROR(EINTR),
00101
00103 invalid_argument = ASIO_SOCKET_ERROR(EINVAL),
00104
00106 message_size = ASIO_SOCKET_ERROR(EMSGSIZE),
00107
00109 name_too_long = ASIO_SOCKET_ERROR(ENAMETOOLONG),
00110
00112 network_down = ASIO_SOCKET_ERROR(ENETDOWN),
00113
00115 network_reset = ASIO_SOCKET_ERROR(ENETRESET),
00116
00118 network_unreachable = ASIO_SOCKET_ERROR(ENETUNREACH),
00119
00121 no_descriptors = ASIO_SOCKET_ERROR(EMFILE),
00122
00124 no_buffer_space = ASIO_SOCKET_ERROR(ENOBUFS),
00125
00127 no_memory = ASIO_WIN_OR_POSIX(
00128 ASIO_NATIVE_ERROR(ERROR_OUTOFMEMORY),
00129 ASIO_NATIVE_ERROR(ENOMEM)),
00130
00132 no_permission = ASIO_WIN_OR_POSIX(
00133 ASIO_NATIVE_ERROR(ERROR_ACCESS_DENIED),
00134 ASIO_NATIVE_ERROR(EPERM)),
00135
00137 no_protocol_option = ASIO_SOCKET_ERROR(ENOPROTOOPT),
00138
00140 not_connected = ASIO_SOCKET_ERROR(ENOTCONN),
00141
00143 not_socket = ASIO_SOCKET_ERROR(ENOTSOCK),
00144
00146 operation_aborted = ASIO_WIN_OR_POSIX(
00147 ASIO_NATIVE_ERROR(ERROR_OPERATION_ABORTED),
00148 ASIO_NATIVE_ERROR(ECANCELED)),
00149
00151 operation_not_supported = ASIO_SOCKET_ERROR(EOPNOTSUPP),
00152
00154 shut_down = ASIO_SOCKET_ERROR(ESHUTDOWN),
00155
00157 timed_out = ASIO_SOCKET_ERROR(ETIMEDOUT),
00158
00160 try_again = ASIO_WIN_OR_POSIX(
00161 ASIO_NATIVE_ERROR(ERROR_RETRY),
00162 ASIO_NATIVE_ERROR(EAGAIN)),
00163
00165 would_block = ASIO_SOCKET_ERROR(EWOULDBLOCK)
00166 };
00167
00168 enum netdb_errors
00169 {
00171 host_not_found = ASIO_NETDB_ERROR(HOST_NOT_FOUND),
00172
00174 host_not_found_try_again = ASIO_NETDB_ERROR(TRY_AGAIN),
00175
00177 no_data = ASIO_NETDB_ERROR(NO_DATA),
00178
00180 no_recovery = ASIO_NETDB_ERROR(NO_RECOVERY)
00181 };
00182
00183 enum addrinfo_errors
00184 {
00186 service_not_found = ASIO_WIN_OR_POSIX(
00187 ASIO_NATIVE_ERROR(WSATYPE_NOT_FOUND),
00188 ASIO_GETADDRINFO_ERROR(EAI_SERVICE)),
00189
00191 socket_type_not_supported = ASIO_WIN_OR_POSIX(
00192 ASIO_NATIVE_ERROR(WSAESOCKTNOSUPPORT),
00193 ASIO_GETADDRINFO_ERROR(EAI_SOCKTYPE))
00194 };
00195
00196 enum misc_errors
00197 {
00199 already_open = 1,
00200
00202 eof,
00203
00205 not_found,
00206
00208 fd_set_failure
00209 };
00210
00211 enum ssl_errors
00212 {
00213 };
00214
00215
00216
00217 inline asio::error_code make_error_code(basic_errors e)
00218 {
00219 return asio::error_code(
00220 static_cast<int>(e), get_system_category());
00221 }
00222
00223 inline asio::error_code make_error_code(netdb_errors e)
00224 {
00225 return asio::error_code(
00226 static_cast<int>(e), get_netdb_category());
00227 }
00228
00229 inline asio::error_code make_error_code(addrinfo_errors e)
00230 {
00231 return asio::error_code(
00232 static_cast<int>(e), get_addrinfo_category());
00233 }
00234
00235 inline asio::error_code make_error_code(misc_errors e)
00236 {
00237 return asio::error_code(
00238 static_cast<int>(e), get_misc_category());
00239 }
00240
00241 inline asio::error_code make_error_code(ssl_errors e)
00242 {
00243 return asio::error_code(
00244 static_cast<int>(e), get_ssl_category());
00245 }
00246
00247 }
00248 }
00249
00250 #undef ASIO_NATIVE_ERROR
00251 #undef ASIO_SOCKET_ERROR
00252 #undef ASIO_NETDB_ERROR
00253 #undef ASIO_GETADDRINFO_ERROR
00254 #undef ASIO_WIN_OR_POSIX
00255
00256 #include "asio/impl/error_code.ipp"
00257
00258 #include "asio/detail/pop_options.hpp"
00259
00260 #endif // ASIO_ERROR_HPP