Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果不读取,python套接字能否接收填充?_Python_Sockets_Tcp - Fatal编程技术网

如果不读取,python套接字能否接收填充?

如果不读取,python套接字能否接收填充?,python,sockets,tcp,Python,Sockets,Tcp,如果不从python tcp套接字读取数据,它会填充并导致错误吗? 在我的代码中,我使用了.send(),并且似乎有来自我正在通话的设备的ack回复。如果我不把这些读出来,它们会堆积起来并产生问题吗?它只是无限地存储它们吗?当然这最终会导致内存问题。。。 谢谢。如果您不从tcp套接字读取数据,则接收端的recv缓冲区和发送端的发送缓冲区将填满,此时您的程序将阻止进一步的send()调用 每个进程将使用多少内存取决于这些缓冲区的大小,这取决于操作系统和套接字选项。例如,在linux上,您会遇到如下

如果不从python tcp套接字读取数据,它会填充并导致错误吗? 在我的代码中,我使用了.send(),并且似乎有来自我正在通话的设备的ack回复。如果我不把这些读出来,它们会堆积起来并产生问题吗?它只是无限地存储它们吗?当然这最终会导致内存问题。。。
谢谢。

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

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

$ss-tpn
状态Recv-Q Send-Q本地地址:端口对等地址:端口
ESTAB 0 2595384 127.0.0.1:3333 127.0.0.1:2222用户:((“python3”,pid=13088,fd=3))
ESTAB 964588 0 127.0.0.1:2222 127.0.0.1:3333用户:((“Python 3”,pid=13087,fd=4))
第一行显示发送进程(完整发送队列,~2.6MB),第二行显示接收进程(完整接收队列,~1MB)


这是因为在使用TCP的过程中,接收器在每次确认时都会告诉发送者它准备接受多少数据用于下一次传输。如果rec缓冲区已满,则发送缓冲区也将填满,然后无法发送更多数据。

套接字与网络缓冲区配合使用。将发生的情况是缓冲区已满,无法接收更多数据。这意味着传入的流量将被丢弃,新的连接可能会失败。@不,输入的流量不会通过tcp自动丢弃,
send()
将被阻止。“此时,您的程序将阻止进一步的
send()
”--你是说它会挂起来?或返回错误?除非使用或非阻塞模式,否则它将在
send()
上无错误地挂起。