1

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

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

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

4

1 回答 1

1

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

不同之处在于write(2)写入尽可能多的字节,然后返回一个整数,指示它写入了多少。当然,它不能写超过你通过它。但它可能会写得更少。内核发送缓冲区中可能没有空间用于传递给它的所有字节。

socket.sendall将此与写入您传递给它的所有字节进行对比。如有必要,它会通过write(2)多次调用来做到这一点。

于 2012-06-26T21:21:30.997 回答