只有當PSH位被設置或緩衝區已滿時,它纔會被讀取,還是有一些時間管理該過程?如果是這樣,那麼這些時間是什麼,或者至少是什麼推薦的?接收端的應用程序什麼時候從TCP緩衝區讀取?
我看着通過RFC1122,但沒有找到具體的信息。我也在網上搜索過,但沒有成功。
只有當PSH位被設置或緩衝區已滿時,它纔會被讀取,還是有一些時間管理該過程?如果是這樣,那麼這些時間是什麼,或者至少是什麼推薦的?接收端的應用程序什麼時候從TCP緩衝區讀取?
我看着通過RFC1122,但沒有找到具體的信息。我也在網上搜索過,但沒有成功。
什麼時候接收端的應用程序從TCP緩衝區讀取?
僅當PSH位被設置或緩衝區已滿時,或者是否存在管理該進程的某些時間時纔會讀取?
這取決於應用。應用程序邏輯應確定何時從TCP recv套接字緩衝區中讀取。技術合作計劃沒有強制任何規定如果應用程序沒有讀取,您的TCP recv緩衝區會被填滿,因爲數據不斷流入並且流量控制開始執行。
您可以編寫一個永不調用recv
的程序,因此不會從TCP緩衝區中獲取數據。或者你可以阻塞套接字並呼叫recv
並被阻塞,直到有數據進入。或者如果它是非阻塞的,當數據到達套接字時,可以依靠諸如select
的輪詢機制來呼叫recv
。 TCP緩衝區不必全部被讀入應用程序。
但是在這方面你應該如何編程你的應用程序有一個通用的經驗法則嗎?表現良好的最佳或最常用的做法是什麼? – igatrinit
什麼設備?什麼OS?什麼應用?如果您直接使用原始套接字訪問操作系統,在庫中找到抽象接口,或者直接在硬件級別上工作,則會產生巨大差異。這很大程度上取決於您使用的接口的抽象級別。 – Dorus
我並沒有試圖建立一個應用程序,我只是想完全理解TCP,所以我不能給你任何細節。我只能說我對瀏覽器,信使,電子郵件客戶端等廣泛使用的應用程序感興趣。我認爲有一些通用規則或建議。也許你可以給我一些最小值和最大值? – igatrinit