[英]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.