linux-socket编程(四) tcp
1:tcp的11种状态:
上面的状态有10种,第11种是CLOSING,这个的产生条件是当服务器和客户端同时发送关闭请求,这时候不会产生FIN_WAIT状态而是会产生CLOSING状态。只有主动发送close的一端,才会有TIME_WAIT状态。
可以使用代码来查看状态。
服务器:客户端的端口是53372
客户端:服务器的端口是6666
查看tcp:
看不到SYN_SEND和SYN_RCVD的原因是这个所需时间太短。
查看其它状态:
首先查看服务器进程pid:
然后关闭该服务器进程:
查看当前服务器的tcp状态。
由上图可以看出客户端所处的状态是CLOSE_WAIT,服务器所处的状态是FIN_WAIT2.
然后有程序:如何使客户端进入CLOSE_WAIT后面的状态,在客户端输入字符回车:
查看当前状态:
对于客户端端来说,为什么可以在发送数据,是因为接收到FIN仅仅代表对方不再发送数据。当客户端向对方发送数据的时候,由于对方进程结束,导致对方会反馈RST段,当收到这个段之后,如果再调用write就会产生SIGPIPE信号,对于这个信号的处理我们通常忽略即可。