您的位置:首页 > 运维架构 > Linux

Linux中socket 错误编码表 errno

2014-01-08 17:16 351 查看
最近在网络编程使用的过程中,发现errno会经常使用。因此决定在此做个留用,以备以后使用。。。

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

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

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

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

所需头文件: #include<string.h>

函数声明: char * strerror(int errnum);

输入: 整数errno

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

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

示例:

#include <string.h>

#include <stdio.h>

#define NUM 150

int main(void)

{

int i;

for ( i=0; i<NUM; 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#define ENOMEM
12 /* 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

原文地址
http://blog.chinaunix.net/uid-116213-id-3376727.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: