數據發送
假設應用程序要發送40KB數據,但是OS的TCP發送緩衝區只有25KB剩餘空間,那麼剩下的15KB數據怎麼辦?
如果等待OS緩衝區可用,會阻塞當前線程,因爲不知道對方什麼時候收到並讀取數據,因此網絡庫應該把這個15KB數據緩存起來,放到這個TCP鏈接的應用層發送緩衝區中,等socket變得可寫的時候立刻發送數據,這樣“發送”操作不會阻塞。如果應用程序隨後又發送50KB數據,而此時發送緩衝區中尚有未發送的數據(若干KB),那麼網絡庫應該把這50KB的數據追加到發送緩衝區的末尾,而不能立刻嘗試write(),因爲這樣可能打亂數據的順序。