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

  • 相关阅读:
    常用的汇编指令与技巧
    汇编调用c函数为什么要设置栈
    lp2356
    String函数的总结
    2019-5-22训练
    STL——substr
    STL 反转函数 (reverse() )
    2019-5-15训练——深搜
    高精度加法
    八皇后题解
  • 原文地址:https://www.cnblogs.com/diegodu/p/3975051.html
Copyright © 2011-2022 走看看