【study】SIGPIPE 信号

如果sever(client)socket已关闭,对等方再发写数据,则会产生SIGPIPE信号。

1.SIGPIPE信号会让进程终止(man 7 signal,阅读SIGPIPE默认ACT)

2.往一个已经接收FIN的套接中写是允许的,接收到FIN仅仅代表对方不再发送数据。

3. 在收到RST段之后,如果再调用write就会产生SIGPIPE信号,对于这个信号的处理我们通常忽略即可。

client:

【study】SIGPIPE 信号

kill调server,server进入半链接状态,client没有close 仍然可以继续写,此时linux内核会给子进程发信号,子进程退出。我们可以捕捉此信号,如上。

TCP/IP 的RST段重置

1)服务器端启动、客户端启动

2)服务器端先kill与客户端通讯的子进程,服务器端会给客户端发送FIN分节

此时:只代表服务器端不发送数据了,不能代表客户端不能往套接字中写数据。

3)如果子进程此时写数据给服务器端(解除屏幕阻塞,输入字符aaaa),

         将要导致TCP/IP协议重置,产生RST段;产生SIGPIPE信号。。

4)所以,一般情况下,需要我们处理SIGPIPE信号,忽略即可。