Go to the documentation of this file.00001
00008
00009
00010
00011
00012 #ifndef ECL_DEVICES_SOCKET_ERROR_HANDLER_POS_HPP_
00013 #define ECL_DEVICES_SOCKET_ERROR_HANDLER_POS_HPP_
00014
00015
00016
00017
00018
00019 #include <ecl/config/ecl.hpp>
00020 #ifndef ECL_IS_APPLE
00021 #ifdef ECL_IS_POSIX
00022
00023
00024
00025
00026
00027 #include <errno.h>
00028 #include <string>
00029 #include <ecl/errors/handlers.hpp>
00030 #include <netdb.h>
00031
00032
00033
00034
00035
00036 namespace ecl {
00037 namespace devices {
00038
00039
00040
00041
00047 inline ecl::Error socket_error() {
00048 switch( errno ) {
00049 case ( EACCES ) : return ecl::Error(ecl::OpenError);
00050 case ( EAFNOSUPPORT): return ecl::Error(ecl::NotSupportedError);
00051 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError);
00052 case ( EMFILE ) : return ecl::Error(ecl::OutOfRangeError);
00053 case ( ENFILE ) : return ecl::Error(ecl::OutOfResourcesError);
00054 case ( ENOBUFS ) : return ecl::Error(ecl::MemoryError);
00055 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError);
00056 case ( EPROTONOSUPPORT ) : return ecl::Error(ecl::NotSupportedError);
00057 default : return ecl::Error(UnknownError);
00058 }
00059 }
00065 inline ecl::Error bind_error() {
00066 switch( errno ) {
00067 case ( EACCES ) : return ecl::Error(ecl::PermissionsError);
00068 case ( EADDRINUSE ) : return ecl::Error(ecl::BusyError);
00069 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError);
00070 case ( EINVAL ) : return ecl::Error(ecl::BusyError);
00071 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError);
00072 case ( EADDRNOTAVAIL ) : return ecl::Error(ecl::InvalidObjectError);
00073 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError);
00074 case ( ELOOP ) : return ecl::Error(ecl::SystemFailureError);
00075 case ( ENAMETOOLONG ) : return ecl::Error(ecl::InvalidArgError);
00076 case ( ENOENT ) : return ecl::Error(ecl::InvalidObjectError);
00077 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError);
00078 case ( ENOTDIR ) : return ecl::Error(ecl::InvalidArgError);
00079 case ( EROFS ) : return ecl::Error(ecl::PermissionsError);
00080 default : return ecl::Error(UnknownError);
00081 }
00082 }
00088 inline ecl::Error accept_error() {
00089 switch( errno ) {
00090 case ( EWOULDBLOCK ) : return ecl::Error(ecl::BlockingError);
00091 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError);
00092 case ( ECONNABORTED ): return ecl::Error(ecl::InterruptedError);
00093 case ( EINTR ) : return ecl::Error(ecl::InterruptedError);
00094 case ( EINVAL ) : return ecl::Error(ecl::UsageError);
00095 case ( EMFILE ) : return ecl::Error(ecl::OutOfResourcesError);
00096 case ( ENFILE ) : return ecl::Error(ecl::OutOfResourcesError);
00097 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError);
00098 case ( EOPNOTSUPP ) : return ecl::Error(ecl::InvalidObjectError);
00099 case ( EFAULT ) : return ecl::Error(ecl::PermissionsError);
00100 case ( ENOBUFS ) : return ecl::Error(ecl::MemoryError);
00101 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError);
00102 case ( EPROTO ) : return ecl::Error(ecl::InvalidArgError);
00103 case ( EPERM ) : return ecl::Error(ecl::PermissionsError);
00104 default : return ecl::Error(UnknownError);
00105 }
00106 }
00112 inline ecl::Error receive_error() {
00113
00114 switch( errno ) {
00115 case ( EAGAIN || EWOULDBLOCK ) : return ecl::Error(ecl::InterruptedError);
00116 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError);
00117 case ( ECONNREFUSED) : return ecl::Error(ecl::ConnectionError);
00118 case ( EFAULT ) : return ecl::Error(ecl::SystemFailureError);
00119 case ( EINTR ) : return ecl::Error(ecl::InterruptedError);
00120 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError);
00121 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError);
00122 case ( ENOTCONN ) : return ecl::Error(ecl::ConnectionError);
00123 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError);
00124 default : return ecl::Error(UnknownError);
00125 }
00126 }
00132 inline ecl::Error ioctl_error() {
00133
00134 switch( errno ) {
00135 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError);
00136 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError);
00137 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError);
00138 case ( ENOTTY ) : return ecl::Error(ecl::InvalidObjectError);
00139 default : return ecl::Error(UnknownError);
00140 }
00141 }
00142
00148 inline ecl::Error send_error() {
00149
00150 switch( errno ) {
00151 case ( EAGAIN || EWOULDBLOCK ) : return ecl::Error(ecl::BlockingError);
00152 case ( EWOULDBLOCK ) : return ecl::Error(ecl::BlockingError);
00153 case ( EACCES ) : return ecl::Error(ecl::PermissionsError);
00154 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError);
00155 case ( ECONNRESET ) : return ecl::Error(ecl::InterruptedError);
00156 case ( EFAULT ) : return ecl::Error(ecl::SystemFailureError);
00157 case ( EINTR ) : return ecl::Error(ecl::InterruptedError);
00158 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError);
00159 case ( EISCONN ) : return ecl::Error(ecl::ConnectionError);
00160 case ( EMSGSIZE ) : return ecl::Error(ecl::WriteError);
00161 case ( ENOBUFS ) : return ecl::Error(ecl::OutOfResourcesError);
00162 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError);
00163 case ( ENOTCONN ) : return ecl::Error(ecl::ConnectionError);
00164 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError);
00165 case ( EOPNOTSUPP ) : return ecl::Error(ecl::NotSupportedError);
00166 case ( EPIPE ) : return ecl::Error(ecl::InterruptedError);
00167 default : return ecl::Error(UnknownError);
00168 }
00169 }
00170
00176 inline ecl::Error gethostbyname_error() {
00177 switch( h_errno ) {
00178 case ( HOST_NOT_FOUND ) : return ecl::Error(ecl::ConnectionError);
00179 case ( NO_ADDRESS ) : return ecl::Error(ecl::InvalidArgError);
00180 case ( NO_RECOVERY ) : return ecl::Error(ecl::UnknownError);
00181 default : return ecl::Error(ecl::UnknownError);
00182 }
00183 }
00189 inline ecl::Error connection_error() {
00190 switch( errno ) {
00191 case ( ( EACCES ) || ( EPERM ) ): return ecl::Error(ecl::PermissionsError);
00192 case ( EADDRINUSE ) : return ecl::Error(ecl::BusyError);
00193 case ( EAFNOSUPPORT ): return ecl::Error(ecl::NotSupportedError);
00194 case ( EAGAIN ) : return ecl::Error(ecl::OutOfResourcesError);
00195 case ( EALREADY ) : return ecl::Error(ecl::BlockingError);
00196 case ( EBADF ) : return ecl::Error(ecl::InvalidObjectError);
00197 case ( ECONNREFUSED ): return ecl::Error(ecl::ConnectionRefusedError);
00198 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError);
00199 case ( EINPROGRESS ) : return ecl::Error(ecl::BlockingError);
00200 case ( EINTR ) : return ecl::Error(ecl::InterruptedError);
00201 case ( EISCONN ) : return ecl::Error(ecl::ConnectionError);
00202 case ( ENETUNREACH ) : return ecl::Error(ecl::ConfigurationError);
00203 case ( ENOTSOCK ) : return ecl::Error(ecl::InvalidObjectError);
00204 case ( ETIMEDOUT ) : return ecl::Error(ecl::TimeOutError);
00205 default : return ecl::Error(ecl::UnknownError);
00206 }
00207 }
00208
00209 }
00210 }
00211
00212 #endif
00213 #endif
00214 #endif