Unix网络编程相关错误码和信号处理
Unix网络编程相关错误码和信号处理
特别注意当出现一下错误码时,处理之后一定要将errno复位为0
在网络编程的过程中会出现一些错误码,下面总结:
EAGAIN(11) : Resource temporarily unavailable
- 错误原因:当将套接字设置为异步时,由于函数调用之后是立即返回的,所以会出现两种情况导致这个错误:(1):当调用read函数,此时没有数据可读,此时read函数会立即返回错误码EAGAIN表示此时无数据可读(2):当调用write函数,此时缓冲区满,write函数将会立即返回错误码EAGAIN。
- 解决方法:EAGAIN错误表示此时无数据可读或者缓冲区已满,所以此时只需要重试即可。
ECONNRESET(104):Connection reset by peer
- 错误原因:当对端socket已关闭,此时调用read或write函数将返回ECONNRESET错误,在之后如果继续调用read或write,就会得到该错误。常见的原因是发送端接收端实现约定好的数据长度不一致,若接收端被通知需要接收99个字节,而服务端发送了100个字节给接收端,这样一来,接收端接收99个字节就执行了close操作,如果发送端继续发送,接收端将向发送端返回一个RESET信号
EALREADY (114):Operation already in progress
- 错误原因:套接字为非阻塞套接字,并且原来的链接请求还未完成
EINPROGRESS(115):Operation in progress
- 错误原因:套接字为非阻塞套接字,连接正在建立
网络编程相关信号
- SIGPIPE(13):管道破裂。管道另一端没有进程接收数据,导致管道破裂而崩溃。对一个对端已经关闭的socket进行两次write,第二次调用将会产生该信号,此信号的默认行为是结束进程。
- 解决方法:将该信号的处理函数设置为SIG_IGN,即忽略此信号