$search
00001 00009 /***************************************************************************** 00010 ** Cross platform 00011 *****************************************************************************/ 00012 00013 #include <ecl/config/ecl.hpp> 00014 #ifndef ECL_IS_MAC 00015 #ifdef ECL_IS_POSIX 00016 00017 /***************************************************************************** 00018 ** Includes 00019 *****************************************************************************/ 00020 00021 #include <errno.h> 00022 #include <netdb.h> // gethostbyname 00023 #include <ecl/errors/handlers.hpp> 00024 #include "../../../include/ecl/devices/detail/socket_error_handler_pos.hpp" 00025 00026 /***************************************************************************** 00027 ** Namespaces 00028 *****************************************************************************/ 00029 00030 namespace ecl { 00031 namespace devices { 00032 00033 /***************************************************************************** 00034 ** Implementation [Exception Handlers] 00035 *****************************************************************************/ 00036 00037 ecl::Error socket_error(const char* loc) { 00038 switch( errno ) { 00039 case ( EACCES ) : return ecl::Error(ecl::OpenError); 00040 case ( EAFNOSUPPORT): return ecl::Error(ecl::NotSupportedError); 00041 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError); 00042 case ( EMFILE ) : return ecl::Error(ecl::OutOfRangeError); 00043 case ( ENFILE ) : return ecl::Error(ecl::OutOfResourcesError); 00044 case ( ENOBUFS ) : return ecl::Error(ecl::MemoryError); 00045 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError); 00046 case ( EPROTONOSUPPORT ) : return ecl::Error(ecl::NotSupportedError); 00047 default : return ecl::Error(UnknownError); 00048 } 00049 } 00050 00051 ecl::Error bind_error(const char* loc) { 00052 switch( errno ) { 00053 case ( EACCES ) : return ecl::Error(ecl::PermissionsError); 00054 case ( EADDRINUSE ) : return ecl::Error(ecl::BusyError); 00055 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError); 00056 case ( EINVAL ) : return ecl::Error(ecl::BusyError); 00057 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError); 00058 case ( EADDRNOTAVAIL ) : return ecl::Error(ecl::InvalidObjectError); 00059 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError); 00060 case ( ELOOP ) : return ecl::Error(ecl::SystemFailureError); 00061 case ( ENAMETOOLONG ) : return ecl::Error(ecl::InvalidArgError); 00062 case ( ENOENT ) : return ecl::Error(ecl::InvalidObjectError); 00063 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError); 00064 case ( ENOTDIR ) : return ecl::Error(ecl::InvalidArgError); 00065 case ( EROFS ) : return ecl::Error(ecl::PermissionsError); 00066 default : return ecl::Error(UnknownError); 00067 } 00068 } 00069 00070 ecl::Error accept_error(const char* loc) { 00071 switch( errno ) { 00072 case ( EWOULDBLOCK ) : return ecl::Error(ecl::BlockingError); 00073 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError); 00074 case ( ECONNABORTED ): return ecl::Error(ecl::InterruptedError); 00075 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00076 case ( EINVAL ) : return ecl::Error(ecl::UsageError); 00077 case ( EMFILE ) : return ecl::Error(ecl::OutOfResourcesError); 00078 case ( ENFILE ) : return ecl::Error(ecl::OutOfResourcesError); 00079 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError); 00080 case ( EOPNOTSUPP ) : return ecl::Error(ecl::InvalidObjectError); 00081 case ( EFAULT ) : return ecl::Error(ecl::PermissionsError); 00082 case ( ENOBUFS ) : return ecl::Error(ecl::MemoryError); 00083 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError); 00084 case ( EPROTO ) : return ecl::Error(ecl::InvalidArgError); 00085 case ( EPERM ) : return ecl::Error(ecl::PermissionsError); 00086 default : return ecl::Error(UnknownError); 00087 } 00088 } 00089 00090 ecl::Error receive_error(const char* loc) { 00091 00092 switch( errno ) { 00093 case ( EAGAIN || EWOULDBLOCK ) : return ecl::Error(ecl::InterruptedError); 00094 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError); 00095 case ( ECONNREFUSED) : return ecl::Error(ecl::ConnectionError); 00096 case ( EFAULT ) : return ecl::Error(ecl::SystemFailureError); 00097 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00098 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError); 00099 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError); 00100 case ( ENOTCONN ) : return ecl::Error(ecl::ConnectionError); 00101 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError); 00102 default : return ecl::Error(UnknownError); 00103 } 00104 } 00105 00106 ecl::Error send_error(const char* loc) { 00107 00108 switch( errno ) { 00109 case ( EAGAIN || EWOULDBLOCK ) : return ecl::Error(ecl::BlockingError); 00110 case ( EWOULDBLOCK ) : return ecl::Error(ecl::BlockingError); 00111 case ( EACCES ) : return ecl::Error(ecl::PermissionsError); 00112 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError); 00113 case ( ECONNRESET ) : return ecl::Error(ecl::InterruptedError); 00114 case ( EFAULT ) : return ecl::Error(ecl::SystemFailureError); 00115 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00116 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError); 00117 case ( EISCONN ) : return ecl::Error(ecl::ConnectionError); 00118 case ( EMSGSIZE ) : return ecl::Error(ecl::WriteError); 00119 case ( ENOBUFS ) : return ecl::Error(ecl::OutOfResourcesError); 00120 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError); 00121 case ( ENOTCONN ) : return ecl::Error(ecl::ConnectionError); 00122 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError); 00123 case ( EOPNOTSUPP ) : return ecl::Error(ecl::NotSupportedError); 00124 case ( EPIPE ) : return ecl::Error(ecl::InterruptedError); 00125 default : return ecl::Error(UnknownError); 00126 } 00127 } 00128 00129 ecl::Error ioctl_error(const char* loc) { 00130 00131 switch( errno ) { 00132 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError); 00133 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError); 00134 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError); 00135 case ( ENOTTY ) : return ecl::Error(ecl::InvalidObjectError); 00136 default : return ecl::Error(UnknownError); 00137 } 00138 } 00139 ecl::Error gethostbyname_error() { 00140 switch( h_errno ) { 00141 case ( HOST_NOT_FOUND ) : return ecl::Error(ecl::ConnectionError); 00142 case ( NO_ADDRESS ) : return ecl::Error(ecl::InvalidArgError); 00143 case ( NO_RECOVERY ) : return ecl::Error(ecl::UnknownError); 00144 default : return ecl::Error(ecl::UnknownError); 00145 } 00146 } 00147 00148 ecl::Error connection_error(const char* loc) { 00149 switch( errno ) { 00150 case ( ( EACCES ) || ( EPERM ) ): return ecl::Error(ecl::PermissionsError); 00151 case ( EADDRINUSE ) : return ecl::Error(ecl::BusyError); 00152 case ( EAFNOSUPPORT ): return ecl::Error(ecl::NotSupportedError); 00153 case ( EAGAIN ) : return ecl::Error(ecl::OutOfResourcesError); 00154 case ( EALREADY ) : return ecl::Error(ecl::BlockingError); 00155 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError); 00156 case ( ECONNREFUSED ): return ecl::Error(ecl::ConnectionRefusedError); 00157 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError); 00158 case ( EINPROGRESS ) : return ecl::Error(ecl::BlockingError); 00159 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00160 case ( EISCONN ) : return ecl::Error(ecl::ConnectionError); 00161 case ( ENETUNREACH ) : return ecl::Error(ecl::ConfigurationError); 00162 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError); 00163 case ( ETIMEDOUT ) : return ecl::Error(ecl::TimeOutError); 00164 default : return ecl::Error(ecl::UnknownError); 00165 } 00166 } 00167 00168 00169 00170 } // namespace devices 00171 } // namespace ecl 00172 00173 #endif /* ECL_IS_POSIX */ 00174 #endif /* !ECL_IS_MAC */ 00175