当前位置:文档之家 > Linux网络编程socket错误码分析

Linux网络编程socket错误码分析

Linux网络编程socket错误分析

socket错误码:

EINTR:4

阻塞的操作被取消阻塞的调用打断。如设置了发送接收超时,就会遇到这种错误。

只能针对阻塞模式的socket。读,写阻塞的socket时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv 的返回值为0,那表明连接已经断开,接收操作也应该结束。

ETIMEOUT:110

1、操作超时。一般设置了发送接收超时,遇到网络繁忙的情况,就会遇到这种错误。

2、服务器做了读数据做了超时限制,读时发生了超时。

3、错误被描述为“connect time out”,即“连接超时”,这种情况一般发生在服务器主机崩溃。此时客户TCP 将在一定时间内(依具体实现)持续重发数据分节,试图从服务TCP 获得一个ACK 分节。当最终放弃尝试后(此时服务器未重新启动),内核将会向客户进程返回ETIMEDOUT 错误。如果某个中间路由器判定该服务器主机已经不可达,则一般会响应“destination unreachable”-“目的地不可达”的ICMP消息,相应的客户进程返回的错误是EHOSTUNREACH 或ENETUNREACH。当服务器重新启动后,由于TCP 状态丢失,之前所有的连接信息也不存在了,此时对于客户端发来请求将回应RST。如果客户进程对检测服务器主机是否崩溃很有必要,要求即使客户进程不主动发送数据也能检测出来,那么需要使用其它技术,如配置SO_KEEPALIVE Socket 选项,或实现某些心跳函数。

EAGAIN:

1、Send返回值小于要发送的数据数目,会返回EAGAIN和EINTR。

2、recv 返回值小于请求的长度时说明缓冲区已经没有可读数据,但再读不一定会触发EAGAIN,有可能返回0表示TCP连接已被关闭。

3、当socket是非阻塞时,如返回此错误,表示写缓冲队列已满,可以做延时后再重试.

4、在Linux进行非阻塞的socket接收数据时经常出现Resource temporarily unavailable,errno 代码为11(EAGAIN),表明在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。对非阻塞socket而言,EAGAIN不是一种错误。

EPIPE:

1、Socket 关闭,但是socket号并没有置-1。继续在此socket上进行send和recv,就会返回这种错误。这个错误会引发SIGPIPE信号,系统会将产生此EPIPE错误的进
程杀死。所以,一般在网络程序中,首先屏蔽此消息,以免发生不及时设置socket进程被杀死的情况。

1、Socket 关闭,但是socket号并没有置-1。继续在此socket上进行send和recv,就会返回这种错误。这个错误会引发SIGPIPE信号,系统会将产生此EPIPE错误的进程杀死。所以,一般在网络程序中,首先屏蔽此消息,以免发生不及时设置socket进程被杀死的情况。

2、write(..) on a socket that has been closed at the other end will cause a SIGPIPE.

3、错误被描述为“broken pipe”,即“管道破裂”,这种情况一般发生在客户进程不理会(或未及时处理)Socket 错误,继续向服务TCP 写入更多数据时,内核将向客户进程发送SIGPIPE 信号,该信号默认会使进程终止(此时该前台进程未进行core dump)。结合上边的ECONNRESET 错误可知,向一个FIN_WAIT2 状态的服务TCP(已ACK 响应FIN 分节)写入数据不成问题,但是写一个已接收了RST 的Socket 则是一个错误。

下载Word文档免费下载:

Linux网络编程socket错误码分析下载

(共7页)

linux网络编程-通过setsockopt函数使socket号重用

linux网络编程-通过setsockopt函数使socket号重用 - 网络编程:关于 linux 下的 setsockopt closesocket 一般不会立即关闭而经历TIME_WAIT...

实验九 Linux网络编程(报告)

网络程序设计 实验原理: linux 网络编程是通过 socket(套接字)接口实现,socket ...在成功 被调用时返回 0;遇到错误时返回"-1"并将 errno 置为相应的错误号。...

基于Linux的Socket网络编程的性能优化

基才LinuxSocket网络编程的性能优化王雷1.王子淘2...关键词:Linux;性能优化;Socket;select()中图分类号...使用数据报胁议UDP;(3)原始Socket(SOCK_RAM)它...

10--Linux网络编程-网络基础-socket编程-高并发服务器

10--Linux网络编程-网络基础-socket编程-高并发服务器_计算机软件及应用_IT/...ARP 数据报格式在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号...

Linux下Socket网络编程

LinuxSocket网络编程 - LinuxSocket 网络编程,文件传输,数据传输的 C 语言例子 2010 年 03 月 11 日 星期四 16:15 什么是 Socket So...

linux网络编程socket

linux网络编程socket - 介绍了一个网络编程客户端和服务端的例子... linux网络编程socket_IT/计算机_专业资料。介绍了一个网络编程客户端和服务端的例子 ...

基于Linux的socket网络编程聊天工具课程设计

基于Linuxsocket网络编程聊天工具课程设计 - *** 《软件综合开发案例教程》课程设计报告 课程设计题目 小组成员:**,**,**,** 任课讲师和助教:**,** ...

Linux网络编程实例详解

?Linux网络编程实例详解 本文介绍了在Linux环境下的socket编程常用函数用法及socket...()函数在成功被调用时返回0;遇到错误时返回“-1”并将errno置为相应的错误号...

Linux下的Socket网络编程:一个简易聊天室的实现-徐慧军

Linux下的Socket网络编程:一个简易聊天室的实现-徐慧军 - 高级程序设计与应用实践 报告 一个简易聊天室的实现 姓名:徐慧军 学号:2121134 专业:电子与通信工程 学院...

Linux网络编程:原始套接字编程及实例分析

Linux 网络编程:原始套接字编程及实 例分析一、原始套接字能干什么? 通常情况...失败( <0 ):出错 实例如下: // 所需头文件 #include <sys/socket.h> #...