linux socket 获取错误代码,Linux中socket 错误编码表 errno

本文介绍了在Linux网络编程中,如何利用errno获取并理解错误代码,特别是通过strerror函数将errno转换为错误描述字符串。示例代码展示了从0到149的errno值对应的错误信息,帮助开发者解决如'Connection reset by peer'等错误问题。
摘要由CSDN通过智能技术生成

最近在网络编程使用的过程中,发现errno会经常使用。因此决定在此做个留用,以备以后使用。。。

虽然errno是非线程安全的,但是可以通过几种机制保证其安全。。

最近在使用的过程中获得了errno,程序无法执行,也不知道如何解决问题。因此,理解每一个返回的errno整数值的含义是很重要的。。

这个我们可以通过strerror函数来实现。。

strerror(返回整数errno对应的错误原因的描述字符串)

所需头文件:  #include函数声明:    char * strerror(int errnum);

输入:          整数errno

输出:         返回描述错误原因的字符串指针

功能:         用来依参数errnum 的错误代码来查询其错误原因的描述字符串,然后将该字符串指针返回。

示例:

#include #include

#define NUM    150

int main(void)

{

int i;

for ( i=0; i{

printf( "%d:%s\n", i, strerror(i) );

}

return 0;

}

运行结果:

0:Success

1:Operation not permitted

2:No such file or directory

3:No such process

4:Interrupted system call

5:Input/output error

6:No such device or address

7:Argument list too long

8:Exec format error

9:Bad file descriptor

10:No child processes

11:Resource temporarily unavailable

12:Cannot allocate memory

13:Permission denied

14:Bad address

15:Block device required

16:Device or resource busy

17:File exists

18:Invalid cross-device link

19:No such device

20:Not a directory

21:Is a directory

22:Invalid argument

23:Too many open files in system

24:Too many open files

25:Inappropriate ioctl for device

26:Text file busy

27:File too large

28:No space left on device

29:Illegal seek

30:Read-only file system

31:Too many links

32:Broken pipe

33:Numerical argument out of domain

34:Numerical result out of range

35:Resource deadlock avoided

36:File name too long

37:No locks available

38:Function not implemented

39:Directory not empty

40:Too many levels of symbolic links

41:Unknown error 41

42:No message of desired type

43:Identifier removed

44:Channel number out of range

45:Level 2 not synchronized

46:Level 3 halted

47:Level 3 reset

48:Link number out of range

49:Protocol driver not attached

50:No CSI structure available

51:Level 2 halted

52:Invalid exchange

53:Invalid request descriptor

54:Exchange full

55:No anode

56:Invalid request code

57:Invalid slot

58:Unknown error 58

59:Bad font file format

60:Device not a stream

61:No data available

62:Timer expired

63:Out of streams resources

64:Machine is not on the network

65:Package not installed

66:Object is remote

67:Link has been severed

68:Advertise error

69:Srmount error

70:Communication error on send

71:Protocol error

72:Multihop attempted

73:RFS specific error

74:Bad message

75:Value too large for defined data type

76:Name not unique on network

77:File descriptor in bad state

78:Remote address changed

79:Can not access a needed shared library

80:Accessing a corrupted shared library

81:.lib section in a.out corrupted

82:Attempting to link in too many shared libraries

83:Cannot exec a shared library directly

84:Invalid or incomplete multibyte or wide character

85:Interrupted system call should be restarted

86:Streams pipe error

87:Too many users

88:Socket operation on non-socket

89:Destination address required

90:Message too long

91:Protocol wrong type for socket

92:Protocol not available

93:Protocol not supported

94:Socket type not supported

95:Operation not supported

96:Protocol family not supported

97:Address family not supported by protocol

98:Address already in use

99:Cannot assign requested address

100:Network is down

101:Network is unreachable

102:Network dropped connection on reset

103:Software caused connection abort

104:Connection reset by peer

105:No buffer space available

106:Transport endpoint is already connected

107:Transport endpoint is not connected

108:Cannot send after transport endpoint shutdown

109:Too many references: cannot splice

110:Connection timed out

111:Connection refused

112:Host is down

113:No route to host

114:Operation already in progress

115:Operation now in progress

116:Stale NFS file handle

117:Structure needs cleaning

118:Not a XENIX named type file

119:No XENIX semaphores available

120:Is a named type file

121:Remote I/O error

122:Disk quota exceeded

123:No medium found

124:Wrong medium type

125:Operation canceled

126:Required key not available

127:Key has expired

128:Key has been revoked

129:Key was rejected by service

130:Owner died

131:State not recoverable

132:Unknown error 132

133:Unknown error 133

134:Unknown error 134

135:Unknown error 135

136:Unknown error 136

137:Unknown error 137

138:Unknown error 138

139:Unknown error 139

140:Unknown error 140

141:Unknown error 141

142:Unknown error 142

143:Unknown error 143

144:Unknown error 144

145:Unknown error 145

146:Unknown error 146

147:Unknown error 147

148:Unknown error 148

149:Unknown error 149

通过这个我们终于理解errno的含义了。。那天做的一个使用非阻塞connect式爬虫,无论如何也不好使,也不知道怎么解决,程序并没有出现段错误,最终定位在write套接字时就退出,而通过FD_ISSET测试此套接字可写,于是不知道怎么解决了。通过捕捉errno值,发现是104.而如果当时我可以知道errno=104是指“Connection reset by peer”,那么我就知道了网络爬虫式客户端需要增加对于SIGPIPE信号的处理了。。因为SIGPIPE默认处理方式是退出,改成自己添加信号处理函数或者使用忽略就可以了。。。

所以列出这些信息,一方面能对大家有所帮助,另一方面方便以后查询。

1#ifndef _ASM_GENERIC_ERRNO_BASE_H

2#define _ASM_GENERIC_ERRNO_BASE_H

3

4#define EPERM            1      /* Operation not permitted */

5#define ENOENT           2      /* No such file or directory */

6#define ESRCH            3      /* No such process */

7#define EINTR            4      /* Interrupted system call */

8#define EIO              5      /* I/O error */

9#define ENXIO            6      /* No such device or address */

10#define E2BIG            7      /* Argument list too long */

11#define ENOEXEC          8      /* Exec format error */

12#define EBADF            9      /* Bad file number */

13#define ECHILD          10      /* No child processes */

14#define EAGAIN          11      /* Try again */

15#defineENOMEM12      /* Out of memory */

16#define EACCES          13      /* Permission denied */

17#define EFAULT          14      /* Bad address */

18#define ENOTBLK         15      /* Block device required */

19#define EBUSY           16      /* Device or resource busy */

20#define EEXIST          17      /* File exists */

21#define EXDEV           18      /* Cross-device link */

22#define ENODEV          19      /* No such device */

23#define ENOTDIR         20      /* Not a directory */

24#define EISDIR          21      /* Is a directory */

25#define EINVAL          22      /* Invalid argument */

26#define ENFILE          23      /* File table overflow */

27#define EMFILE          24      /* Too many open files */

28#define ENOTTY          25      /* Not a typewriter */

29#define ETXTBSY         26      /* Text file busy */

30#define EFBIG           27      /* File too large */

31#define ENOSPC          28      /* No space left on device */

32#define ESPIPE          29      /* Illegal seek */

33#define EROFS           30      /* Read-only file system */

34#define EMLINK          31      /* Too many links */

35#define EPIPE           32      /* Broken pipe */

36#define EDOM            33      /* Math argument out of domain of func */

37#define ERANGE          34      /* Math result not representable */

38

39#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值