如果您没有从python tcp套接字读取,它是否会填充并导致错误? 在我的代码中,我使用.send(),似乎有一个来自我正在交谈的设备的回复。如果我不读这些,他们会积累并产生问题吗?它只是无限地存储它们吗?当然这最终会引起记忆问题...... 感谢。
答案 0 :(得分:1)
如果你没有从tcp套接字读取,那么接收端的recv缓冲区和seinding端的发送缓冲区将会填满,此时你的程序将阻止进一步send()
次调用。 / p>
每个进程将使用多少内存取决于这些缓冲区的大小,这取决于操作系统和套接字选项。例如,在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),第二行显示接收过程(完整recv队列,~1MB)。
这是因为在使用TCP的data transfer期间,接收方通过每个ACK告诉发送方它准备接受下一次传输的数据量。如果rec缓冲区已满,则发送缓冲区也将填满,然后不再发送数据。