Line data Source code
1 : #include "source/common/network/io_socket_error_impl.h" 2 : 3 : #include "envoy/common/platform.h" 4 : 5 : #include "source/common/common/assert.h" 6 : #include "source/common/common/utility.h" 7 : 8 : namespace Envoy { 9 : namespace Network { 10 : 11 1863 : Api::IoError::IoErrorCode IoSocketError::getErrorCode() const { return error_code_; } 12 : 13 0 : std::string IoSocketError::getErrorDetails() const { return errorDetails(errno_); } 14 : 15 0 : Api::IoErrorPtr IoSocketError::getIoSocketInvalidAddressError() { 16 0 : return Api::IoError::wrap( 17 0 : new IoSocketError(SOCKET_ERROR_NOT_SUP, Api::IoError::IoErrorCode::NoSupport)); 18 0 : } 19 : 20 88 : Api::IoErrorPtr IoSocketError::create(int sys_errno) { 21 88 : return Api::IoError::wrap(new IoSocketError(sys_errno)); 22 88 : } 23 : 24 0 : Api::IoErrorPtr IoSocketError::getIoSocketEbadfError() { 25 0 : return Api::IoError::wrap(new IoSocketError(SOCKET_ERROR_BADF, Api::IoError::IoErrorCode::BadFd)); 26 0 : } 27 : 28 1690 : Api::IoErrorPtr IoSocketError::getIoSocketEagainError() { 29 1690 : static auto* instance = new IoSocketError(SOCKET_ERROR_AGAIN, Api::IoError::IoErrorCode::Again); 30 1690 : return Api::IoError::reusedStatic(instance); 31 1690 : } 32 : 33 0 : Api::IoCallUint64Result IoSocketError::ioResultSocketInvalidAddress() { 34 0 : return {0, getIoSocketInvalidAddressError()}; 35 0 : } 36 : 37 88 : Api::IoError::IoErrorCode IoSocketError::errorCodeFromErrno(int sys_errno) { 38 88 : switch (sys_errno) { 39 0 : case SOCKET_ERROR_AGAIN: 40 0 : return IoErrorCode::Again; 41 0 : case SOCKET_ERROR_NOT_SUP: 42 0 : return IoErrorCode::NoSupport; 43 0 : case SOCKET_ERROR_AF_NO_SUP: 44 0 : return IoErrorCode::AddressFamilyNoSupport; 45 0 : case SOCKET_ERROR_IN_PROGRESS: 46 0 : return IoErrorCode::InProgress; 47 0 : case SOCKET_ERROR_PERM: 48 0 : return IoErrorCode::Permission; 49 0 : case SOCKET_ERROR_MSG_SIZE: 50 0 : return IoErrorCode::MessageTooBig; 51 0 : case SOCKET_ERROR_INTR: 52 0 : return IoErrorCode::Interrupt; 53 0 : case SOCKET_ERROR_ADDR_NOT_AVAIL: 54 0 : return IoErrorCode::AddressNotAvailable; 55 0 : case SOCKET_ERROR_BADF: 56 0 : return IoErrorCode::BadFd; 57 55 : case SOCKET_ERROR_CONNRESET: 58 55 : return IoErrorCode::ConnectionReset; 59 0 : case SOCKET_ERROR_NETUNREACH: 60 0 : return IoErrorCode::NetworkUnreachable; 61 0 : case SOCKET_ERROR_INVAL: 62 0 : return IoErrorCode::InvalidArgument; 63 33 : default: 64 33 : ENVOY_LOG_MISC(debug, "Unknown error code {} details {}", sys_errno, errorDetails(sys_errno)); 65 33 : return IoErrorCode::UnknownError; 66 88 : } 67 88 : } 68 : 69 : } // namespace Network 70 : } // namespace Envoy