正常關機,延遲選項和套接字關

2021-10-01 05:47:31 字數 1150 閱讀 2112

提供了以下材料,以闡明關閉套接字連線以關閉套接字的主題。重要的是區分關閉套接字連線和關閉套接字之間的區別。

關閉套接字連線涉及兩個端點之間的協議訊息交換,以下稱為關閉序列。定義了兩種常規的關閉順序類:正常和異常(也稱為「硬」)。在正常關閉順序中,可以在關閉連線之前傳送已排隊但尚未傳輸的任何資料。在異常關閉中,所有未傳送的資料都會丟失。關閉序列的出現(正常或異常)也可以用於向關聯的應用程式提供fd_close指示,表明正在進行關閉。

另一方面,關閉套接字會使套接字控制代碼釋放,以便應用程式無法再以任何方式引用或使用套接字。

在windows套接字中,關閉功能和wsasenddisconnect功能都可以用於啟動關閉序列,而closesocket功能用於取消分配套接字控制代碼並釋放任何關聯的資源。但是,由於closesocket函式隱式導致關閉序列發生(如果尚未發生),因此會引起一定程度的混亂。實際上,依靠該功能並使用closesocket來啟動關閉序列並釋放套接字控制代碼已經成為一種相當普遍的程式設計實踐。

為了促進這種用法,套接字介面通過套接字選項機制提供了控制,該機制允許程式設計師指示隱式關閉序列應該是平穩的還是中止的,以及closesocket函式是否應該持續(不是立即完成)以便有時間完成正常的關機程式。這些重要的區別和以這種方式使用closesocket的後果仍未被廣泛理解。

通過為套接字選項so_linger和so_dontlinger建立適當的值,可以使用closesocket函式獲得以下型別的行為:

異常關閉順序,立即從closesocket返回。

正常關機,延遲返回直到關機順序完成或經過指定的時間間隔。如果在正常關閉序列完成之前該時間間隔到期,則會發生異常關閉序列,並且closesocket返回。

正常關機,立即返回—允許關機序列在後台完成。儘管這是預設行為,但應用程式無法知道正常關閉序列何時(或是否)實際完成。

使用的so_linger和so_dontlinger套接字選項和相關聯的留鏈結構進行更詳細的在所述參考部分中討論sol_socket套接字選項和留鏈結構。

可以用來減少連線斷開期間出現問題的機會的一種技術是避免依賴closesocket啟動隱式關閉。而是使用兩個顯式關閉功能之一shutdown或wsasenddisconnect。這進而導致對等應用程式接收到fd_close指示,該指示指示已接收到所有未決資料。為了說明這一點,下表顯示了應用程式的客戶端和伺服器元件將呼叫的功能,其中客戶端負責啟動正常關機。

通用套接字選項和TCP套接字選項

1.套接字選項函式原型 include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen int setsockopt int sockfd,int level,int optname,const...

通用套接字選項和TCP套接字選項

1.套接字選項函式原型 include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen int setsockopt int sockfd,int level,int optname,const...

獲取和設定套接字選項

下面幾種方法可用來獲取和設定影響套接字的選項 1 getsockopt 和 setsockopt 函式 2 fcntl 函式 3 ioctl 函式。本文將介紹 getsockopt 和 setsockopt 函式,對 fcntl 的介紹見 url 函式介紹 url 而對 ioctl 的介紹則留到後面...