[英]Python 2.7 TCP Sockets: socket.send() that returns zero versus socket.send() that raises socket.error exception?
[英]python 2.7 socket.send() general contract
有人可以向我解释python的socket.send()方法的一般约定吗? 作为教育项目的一部分,我正在制作某种流量生成器。
每当执行socket.send()方法时,我都会进行简单的日志记录,我会发送一些流量,并在方法完成时记下文件的时间(除其他事项外,我还会记录日志)。 这些日志显示,我发送的消息多于wireshark显示的消息,这是在我的传出流量变得相对较高时发生的。
我已阅读: https : //docs.python.org/2/howto/sockets.html#socket-howto
正如我在链接中提到的那样:'它们不一定要处理您交给它们(或期望它们)的所有字节,因为它们的主要重点是处理网络缓冲区。 通常,它们在关联的网络缓冲区已满(发送)时返回。
如果我理解正确,则不能保证我的信息会正确发送。 我可以读取socket.send() 处理了多少字节,但是我想知道“处理”的含义是什么。
有人可以向我解释:
当您使用TCP时,网络层会确保您传递给send()
所有字节实际上都将被发送(如果未发送,套接字将被关闭)。 但是,听起来您是在计算数据包而不是字节。
调用send()
的次数与发送的数据包的数目之间并不总是存在关系。 网络层可以自由地将传递给send()
的数据合并或拆分为不同大小的数据包,只要它们都以与发送的顺序相同的方式到达远端。
如果要进一步控制发送的数据包数量 ,请使用UDP而不是TCP。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.