前几天我看了一些Python代码并遇到了这个问题:
s.sendall(req % (len(body), body))
其中len(正文)解析为超过500K字节。这被发送到一个Apache服务器,它应该上限为8190字节(我发现当我尝试使用C的write()函数发出类似的请求时)。那么Python中的sendall()有什么特别之处呢?
答案 0 :(得分:1)
如果您将数据发送到Apache或其他任何内容都无关紧要。我们所讨论的套接字远端的软件对write(2)
和socket.sendall
之间的行为差异没有直接影响。
区别在于write(2)
写入尽可能多的字节,然后返回一个整数,表示它写了多少。当然,它写的不仅仅是你通过它。但它可能写得更少。对于传递给它的所有字节,内核发送缓冲区可能没有空间。
将此与socket.sendall
对比,后者将您传递给它的所有字节写入。如果需要,可以多次调用write(2)
来完成此操作。