zoukankan      html  css  js  c++  java
  • C/S 中当服务器进程崩溃的时候 SIGPIPE

    程序还是https://github.com/juniperdiego/Unix-network-programming-of-mine/tree/master/tcpserv02

    参考unix网络编程 5.12节

    我们在serve 启动、client启动后 ,在serve上找到那个和client 交互的子进程,然后kill -9 。

    用wireshark抓包

    前面3个包是三次握手建立tcp连接,

    第四个包是,由于我们杀死了server端的处理tcp连接的进程,关闭fd,然后调用close发送FIN包,表示,server端不在发送数据,但是可以接受数据。

    第五个包是第四个包的ACK

    第六、七个包忽略

    第八个包,client端给serve端发送数据,

    第九个包,然后client端调用read(),发现read()== 0,然后进程退出,发送FIN包。

    第十、十一个包,由于serve端的进程已经退出,所以server端的kernl无法找到对应的端口号,回复给client端 RST。

    另外,有关SIGPIPE:

    连接建立,若某一端关闭连接,而另一端仍然向它写数据,第一次写数据后会收到RST响应,此后再写数据,内核将向进程发出SIGPIPE信号,通知进程此连接已经断开。而SIGPIPE信号的默认处理是终止程序,

  • 相关阅读:
    [悟]你为什么想创业
    [悟] 因上努力,果上随缘
    自己写个多任务多线程断点下载框架
    大道甚夷,而人好径
    [经验帖]外包如何定价
    python 基础语法
    python 中文编码问题
    python的运行机制和版本区别
    [转]linux 调用动态库so文件
    shell join详解
  • 原文地址:https://www.cnblogs.com/diegodu/p/3975051.html
Copyright © 2011-2022 走看看