如果不读python套接字可以接收填充吗?

2024-04-24 09:41:08 发布

您现在位置:Python中文网/ 问答频道 /正文

如果不从pythontcp套接字读取,它是否会填充并导致错误? 在我的代码中,我使用了.send(),并且似乎有一个来自与我交谈的设备的ack回复。如果我不把这些读出来,它们会不会堆积起来,产生问题?它只是无限地存储它们吗?当然这最终会导致记忆问题。。。 谢谢。你知道吗


Tags: 记忆代码send错误ackpythontcp
1条回答
网友
1楼 · 发布于 2024-04-24 09:41:08

如果不从tcp套接字读取数据,那么接收端的recv缓冲区和发送端的send缓冲区将被填满,此时程序将阻止进一步的send()调用。你知道吗

每个进程将使用多少内存取决于这些缓冲区的大小,这取决于操作系统和套接字选项。例如,在linux上,您会遇到如下情况:

$ ss -tpn
State  Recv-Q Send-Q  Local Address:Port Peer Address:Port   
ESTAB  0      2595384 127.0.0.1:3333     127.0.0.1:2222    users:(("python3",pid=13088,fd=3))
ESTAB  964588 0       127.0.0.1:2222     127.0.0.1:3333    users:(("python3",pid=13087,fd=4))

第一行显示发送进程(完全发送队列,~2.6MB),第二行显示接收进程(完全接收队列,~1MB)。你知道吗

这是因为在使用TCP的data transfer期间,接收端通过每个ACK告诉发送方它准备接受多少数据用于下一次传输。如果rec缓冲区已满,发送缓冲区也将满,然后就不能再发送数据了。你知道吗

相关问题 更多 >