前几天我在看一些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)
来执行此操作。