2010-02-15 19 views
5

我問這個先前的問題這裏:當推標誌在TCP段設置

tcp two sides trying to connect simultaneously

我試圖在溶液中給定的方法和同時在使用netcat的,用醚嗅探分組我觀察到發送當我從一側發送一個「你好」字符串到另一側時,它被設置爲推送標誌的段中發送。

誰決定設置推標誌? 在tcp段中設置push或urgent標誌的規則是什麼? 是否可以使用套接字API?

回答

6

tcp堆棧使用PUSH標誌來基本上說「我現在完成了」。這只是表明數據段完全由源傳輸。

在userland(你的套接字api)中沒有辦法指出或控制它,因爲這只是tcp棧/實現。作爲URGENT標誌。

(來源:Richard Stevens - Tcp/ip illustrated vol 1,第20章)

+7

上面的評論是錯誤的沒有一種方法來控制從用戶空間發送的推送標誌。請參閱TCP_NODELAY和TCP_CORK套接字選項(man 7 tcp)和MSG_MORE標誌(man 2發送)。 – MaZe

5

您可以設置使用send()MSG_OOB標誌設置緊急標誌。正如這意味着,發送的數據將是帶外的,這意味着它通常不會被主叫方僅僅呼叫read()接收。接收端會得到一些OOB數據的指示,如信號SIGURG,或者套接字將變得異常,可以使用select()進行檢查。

大多數時候你不想設置URGENT標誌。