$search
00001 // 00002 // error.hpp 00003 // ~~~~~~~~~ 00004 // 00005 // Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com) 00006 // 00007 // Distributed under the Boost Software License, Version 1.0. (See accompanying 00008 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 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 // boostify: error category definitions go here. 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 } // namespace error 00248 } // namespace asio 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