套接字選項 通用,ipv4,ipv6,tcp和sctp
fcntl函式,因為它是把套接字設定為非阻塞式i/o型或訊號驅動式i/o型以及設定套接字屬主的posix的方法。
套接字選項粗分為兩大基本型別:一是啟用或者禁止某個特性的二元選項,二是取得並返回我們可以設定或檢查的特定值的選項。
設定或獲取選項有時序上的考慮
如果想在三路握手完成時確保這些套接字選項中的某乙個是給已連線套接字設定的,那麼我們必須先給監聽套接字設定該選項。
so_error核心能以下面兩種方式之一立即通知程序這個錯誤。
1.如果程序阻塞在對該套接字的select呼叫上,那麼無論是檢測可讀條件還是可寫條件,select均返回並設定其中乙個或所有兩個條件。
2.如果程序使用訊號驅動式i/o模型,那就給程序或程序組產生乙個sigio訊號。
so_keepalive套接字選項 tcp給對端傳送乙個保持存活探測分節
1.對端以期望的ack響應。
2.對端以rst響應,它告知本端tcp:對端已崩潰且已重新啟動。
3.對端對保持存活探測分節沒有任何響應。
時間引數:大多數核心是基於整個核心維護這些時間引數的,而不是基於每個套接字維護的。本選項一般由伺服器使用,保持存活選項將檢查出這些半開連線並終止它們。
so_linger選項 預設操作是close立即返回,但是如果有資料殘留在套接字緩衝區中,系統試圖把這些資料傳送給對端。
time_wait狀態是我們的朋友,不要試圖避免這個狀態。
使用這個選項時,應用程式檢查close的返回值非常重要,如果在資料傳送完並被確認前延滯時間到的話,close將返回ewouldblock錯誤。
設定了so_linger套接字選項後,close的成功返回只是告訴我們先前傳送的資料(和fin)已由對端tcp確認,而不能告訴我們對端應用程式是否已讀取資料。
讓客戶知道服務端已讀取資料的乙個方法是改為呼叫shutdown而不是close,並等待對端close連線的當地端(伺服器端)
三個返回時機:
1.close立即返回,根本不等待
2.close一直拖延到接收了對於客戶端fin的ack才返回。
3.後跟乙個read呼叫的shutdown一直等到接收了對端的fin才返回。
獲知對端應用程式已讀取我們的資料的另外乙個方法是使用應用級確認,ack。
對於tcp來說,套接字接收緩衝區中可用空間的大小限定了tcp通告對端的視窗大小。
tcp流量控制,如果對端無視視窗大小而發出了超過該視窗大小的資料,本端tcp將丟棄它們。
對於udp淶水,當接收到的資料裝不進套接字接收緩衝區時,該資料報就被丟棄。
udp是沒有流量控制的。事實上較快的傳送端甚至可以淹沒本機的網路介面,導致資料表被本機丟棄。
tcp的視窗規模選項是在建立連線時用syn分節與對端互換得到的。對於客戶,這意味著so_rcvbuf選項必須在呼叫connect之前設定。對於伺服器,這意味著該選項必須在呼叫listen之前給監聽套接字設定。給已連線套接字設定該選項對於可能存在的視窗規模選項沒有任何影響。套接字緩衝區的大小總是由新建立的已連線套接字從監聽套接字繼承而來。
tcp套接字緩衝區的大小只是是相應連線的mss值的四倍。依據的是tcp快速恢復演算法的工作機制。
tcp必須為每個分節保留乙個副本。
udp套接字的傳送緩衝區中可用空間的位元組數從不改變,並且不為由應用程式傳遞給它的資料報保留副本。
udp沒有傳送緩衝區,只有傳送緩衝區大小這個屬性。
so_reuseaddr允許啟動乙個監聽伺服器並**眾所周知的埠,及時以前建立的將該埠用作它們的本地埠的連線仍存在。它允許單個程序**同乙個埠到多個套接字上,只要每次**指定不同的本地ip位址即可。
在所有tcp伺服器程式中,在呼叫bind之前設定so_reuseaddr套接字選項。
當編寫乙個可在同一時刻在同一主機執行多次的多播應用程式時,設定so_reuseaddr套接字選項,並將所參與多播組的位址作為本地ip位址**。
so_reuseaddr有個潛在的安全問題,nfc通常埠2049不是保留埠。
一般情況下,在原始套接字上傳送的資料報其ip首部是由核心構造的。
tcp_nodelay開啟本選項將禁止tcp的nagle演算法
nagel演算法的目的在於減少廣域網上小分組的數目,防止乙個連線在任何時刻有多個小分組待確認。
nagle演算法常與ack延滯演算法聯合使用。該演算法使得tcp在接收到資料後不立即傳送ack,而是等待一小段時間,然後才傳送ack。tcp期待這段時間內自身有資料傳送回對端,被延滯的ack就可以由這些資料捎帶,從而省掉乙個tcp分節。
不適合用nagle演算法和tcp的ack延滯演算法的客戶時以若干小片資料向伺服器傳送單個邏輯請求的客戶。
設定某個檔案狀態標識的唯一正確方法是:先取得當前標誌,與新標識邏輯或後再設定標識
so_sndbuf和so_rcvbuf套接字選項主要用途是長胖管道上的批量資料傳送。另一方面,udp可能期望增加接收緩衝區的大小以允許核心在應用程序較忙時排隊更多的資料報。
第七章小結
第七章我們主要是學習了查詢,是在前面的基礎上對查詢進行優化。一 基本概念 查詢表 由同一型別的資料元素或記錄構成的集合。完全鬆散 關鍵字 根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的記錄或資料元素。動態查詢表和靜態查詢表 若在查詢的同時對錶做修改操作 如插入或刪除 則相應的表稱為動態查詢...
第七章學習小結
第七章的內容是查詢。查詢可以分為3種。分別是線性表查詢 樹表查詢 雜湊表查詢。1 線性表查詢 線性表查詢主要介紹了順序查詢和折半查詢這兩種方法。1 順序查詢區別於上學期學的方法,設定了哨兵,採用從後往前開始查詢的方法,將時間複雜度縮短了一倍。asl n 1 2 2 折半查詢,其實也叫二分查詢,原理是...
第七章學習小結
查詢的基本概念 查詢表 同一型別的資料元素 記錄 構成的集合。靜態查詢表 對查詢表只進行查詢操作。動態查詢表 不僅進行查詢操作,而且在查詢過程中還伴隨著插入 查詢的資料元素不在表中時 刪除某個資料元素的操作。關鍵字 key 是資料元素 或記錄 的某個資料項的值,用它可標識 識別 乙個資料元素 或記錄...