2024-04-24 09:41:08 发布
网友
如果不从pythontcp套接字读取,它是否会填充并导致错误? 在我的代码中,我使用了.send(),并且似乎有一个来自与我交谈的设备的ack回复。如果我不把这些读出来,它们会不会堆积起来,产生问题?它只是无限地存储它们吗?当然这最终会导致记忆问题。。。 谢谢。你知道吗
如果不从tcp套接字读取数据,那么接收端的recv缓冲区和发送端的send缓冲区将被填满,此时程序将阻止进一步的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缓冲区已满,发送缓冲区也将满,然后就不能再发送数据了。你知道吗
如果不从tcp套接字读取数据,那么接收端的recv缓冲区和发送端的send缓冲区将被填满,此时程序将阻止进一步的
send()
调用。你知道吗每个进程将使用多少内存取决于这些缓冲区的大小,这取决于操作系统和套接字选项。例如,在linux上,您会遇到如下情况:
第一行显示发送进程(完全发送队列,~2.6MB),第二行显示接收进程(完全接收队列,~1MB)。你知道吗
这是因为在使用TCP的data transfer期间,接收端通过每个ACK告诉发送方它准备接受多少数据用于下一次传输。如果rec缓冲区已满,发送缓冲区也将满,然后就不能再发送数据了。你知道吗
相关问题 更多 >
编程相关推荐