前几天我在看一些Python代码,发现了这一点:

   s.sendall(req % (len(body), body))


其中len(body)解析为超过500K字节。这被发送到Apache服务器,该服务器的最大容量为8190字节(我发现当我尝试使用C的write()函数发出类似请求时确实如此)。那么,Python中的sendall()有何特别之处?

最佳答案

是否将数据发送到Apache或其他任何东西都没有关系。我们所讨论的套接字远程端上的软件基本上对write(2)socket.sendall之间的行为差​​异没有直接影响。

区别在于write(2)写入尽可能多的字节,然后返回一个整数,指示已写入的字节数。当然,它不能超过您的通过。但是它可能写的更少。内核发送缓冲区中可能没有足够的空间来传递给它的所有字节。

将此与socket.sendall进行对比,后者会记录您传递给它的所有字节。如有必要,它通过多次调用write(2)来执行此操作。

09-05 13:34