当前位置:  技术问答>linux和unix

SIGPIPE在什么情况下容易发生?

    来源: 互联网  发布时间:2016-05-08

    本文导语:  ftp上传程序改为本地用,ip指向了 127.0.0.1  本以为变为本地后,传输状况会好。可反而频发SIGPIPE. 让我很奇怪,到底什么情况下易发生SIGPIPE? | 当一个进程向接收了RST的套接口进行写操作时...

ftp上传程序改为本地用,ip指向了 127.0.0.1 
本以为变为本地后,传输状况会好。可反而频发SIGPIPE.

让我很奇怪,到底什么情况下易发生SIGPIPE?

|
当一个进程向接收了RST的套接口进行写操作时, 内核给该进程发一个SIGPIPE信号。
这个信号默认操作就是终止进程, 一般写程序的时候都是屏蔽掉这个信号。


下面是我以前总结的一些:
原文:http://blog.chinaunix.net/u/6593/showart_304065.html

RST的含义为“复位”,它是TCP在某些错误情况下所发出的一种TCP分节。有三个条件可以产生RST:

 1), SYN到达某端口但此端口上没有正在监听的服务器。

 2), TCP想取消一个已有连接

 3), TCP接收了一个根本不存在的连接上的分节。

 

1.  Connect 函数返回错误ECONNREFUSED:

如果对客户的SYN的响应是RST,则表明该服务器主机在我们指定的端口上没有进程在等待与之连接(例如服务器进程也许没有启动),这称为硬错(hard error),客户一接收到RST,马上就返回错误ECONNREFUSED.

 

TCP为监听套接口维护两个队列。两个队列之和不超过listen函数第二个参数backlog。

当一个客户SYN到达时,若两个队列都是满的,TCP就忽略此分节,且不发送RST.这个因为:这种情况是暂时的,客户TCP将重发SYN,期望不久就能在队列中找到空闲条目。要是TCP服务器发送了一个RST,客户connect函数将立即发送一个错误,强制应用进程处理这种情况,而不是让TCP正常的重传机制来处理。还有,客户区别不了这两种情况:作为SYN的响应,意为“此端口上没有服务器”的RST和意为“有服务器在此端口上但其队列满”的RST.

 

Posix.1g允许以下两种处理方法:忽略新的SYN,或为此SYN响应一个RST.历史上,所有源自Berkeley的实现都是忽略新的SYN。

 

 

2.如果杀掉服务器端处理客户端的子进程,进程退出后,关闭它打开的所有文件描述符,此时,当服务器TCP接收到来自此客户端的数据时,由于先前打开的那个套接字接口的进程已终止,所以以RST响应。

       经常遇到的问题:

              如果不判断read , write函数的返回值,就不知道服务器是否响应了RST, 此时客户端如果向接收了RST的套接口进行写操作时,内核给该进程发一个SIGPIPE信号。此信号的缺省行为就是终止进程,所以,进程必须捕获它以免不情愿地被终止。

              进程不论是捕获了该信号并从其信号处理程序返回,还是不理会该信号,写操作都返回EPIPE错误。

 

3.  服务器主机崩溃后重启

如果服务器主机与客户端建立连接后崩溃,如果此时,客户端向服务器发送数据,而服务器已经崩溃不能响应客户端ACK,客户TCP将持续重传数据分节,试图从服务器上接收一个ACK,如果服务器一直崩溃客户端会发现服务器已经崩溃或目的地不可达,但可能需要比较长的时间; 如果服务器在客户端发现崩溃前重启,服务器的TCP丢失了崩溃前的所有连接信息,所以服务器TCP对接收的客户数据分节以RST响应。


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • SIGPIPE信号中断问题?(急需,在线等)
  • linux信号处理问题SIGPIPE
  • linux下进程接收不到SIGPIPE信号!!
  • 程序收到SIGPIPE信號異常結束,是什麽原因?
  • Program received signal SIGPIPE, Broken pipe. 这是什么回事?
  • C/C++语言问题:(void) signal(SIGPIPE, pstat); 是什么意思?
  • 网络通信SIGPIPE信号问题
  • Program received signal SIGPIPE, Broken pipe.
  • linux socket程序除了有可能接受到SIGPIPE信号使程序中断外,还有什么别的信号如此?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3