• 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信号的默认处理是终止程序,

  • 相关阅读:
    APP设计资源
    browsersync实现网页实时刷新(修改LESS,JS,HTML时)
    Browsersync + Gulp.js
    用原生js对表格排序
    js深复制
    c++刷题(43/100)矩阵旋转打印
    将本地的mongodb迁移到阿里云
    c++刷题(39/100)笔试题3
    c++刷题(37/100)笔试题2
    c++刷题(33/100)笔试题1
  • 原文地址:https://www.cnblogs.com/diegodu/p/3975051.html
Copyright © 2020-2023  润新知