18.5 TCP的半关闭
TCP 提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
这就是所谓的半关闭,
我已经完成了数据传送,因此发送一个文件的结束(FIN)给另一端,
但我还想接收另一端发来的数据,直到他给我发来文件结束(FIN)
shutdown可以指定在某个方向上终止连接,通过指定标志:SHUT_RD, SHUT_WR, SHUT_RDWR。比如指定SHUT_WR后可以继续读数据,但不能写入了。而close是两个方向上终止连接。
close会将描述符的引用计数减一,如果引用计数变为0就关闭描述符,发送FIN。而shutdown不管引用计数,直接发送FIN终止连接。所以在多线程下操作同一个socket描述符下,一个线程调用shutdown会使其他线程无法使用这个描述符,而调用close就不会影响到其他线程。
shutdown()的调用是需要一个参数:0代表禁止下次的数据读取;1代表禁止下次的数据写入;2代表禁止下次的数据读取和写入。
如果应用程序不调用c l o s e而调用s h u t d o w n,且第2个参数值为1,则插口的A P I支持
半关闭。然而,大多数的应用程序通过调用close终止两个方向的连接。
node2:/root#tcpdump -S -i lo dst port not 22 and dst port not 61326
wireshark:
import socket
import time
s = socket.socket(socket.AF_INET,socket
18.5 TCP的半关闭
最新推荐文章于 2024-01-26 22:04:46 发布
TCP连接在传输数据完成后,可以进入半关闭状态,即一方完成发送数据,发起关闭,另一方仍可发送数据。这个阶段允许系统释放资源,但保持一段时间以便接收未确认的数据。了解TCP半关闭状态对于优化网络通信和错误处理至关重要。
摘要由CSDN通过智能技术生成