Go to the documentation of this file.00001
00009
00010
00011
00012
00013 #include <ecl/config/ecl.hpp>
00014 #ifndef ECL_IS_MAC
00015 #ifdef ECL_IS_POSIX
00016
00017
00018
00019
00020
00021 #include <errno.h>
00022 #include <netdb.h>
00023 #include <ecl/errors/handlers.hpp>
00024 #include "../../../include/ecl/devices/detail/socket_error_handler_pos.hpp"
00025
00026
00027
00028
00029
00030 namespace ecl {
00031 namespace devices {
00032
00033
00034
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 }
00171 }
00172
00173 #endif
00174 #endif
00175