我试图了解套接字模块是如何工作的,我有一个愚蠢的问题:
在socket.send()
清除之前,socket.recv()
在哪里发送了数据?
我相信中间某处必须有一个缓冲区,等待socket.recv()调用来拉出这些数据。
我刚刚对服务器进行了测试,该服务器一次发送了大量数据,然后连接到(故意)非常缓慢地提取数据的客户端。最终的结果是数据在几分之一秒内发送,另一方面,它完全收到10个字节.recv(10)
的小块,这需要20秒。
同时存储此数据的位置??,此缓冲区的默认大小是多少?如何访问和修改?
感谢。
答案 0 :(得分:0)
了解OSI层以及TCP和UDP等不同连接。 socket.send
实现TCP数据传输。如果查看OSI层,您会发现第4层(即传输层)将缓冲要传输的数据。缓冲区的默认大小取决于实现。
答案 1 :(得分:0)
OS(内核)缓冲数据。
在Linux上,可以通过/ proc接口访问缓冲区大小参数。有关详细信息,请参阅man 7 socket
(最后。)