SOL_SOCKET 插座選項

以下表格描述 SOL_SOCKET 套接字選項。 如需取得和設定套接字選項的詳細資訊,請參閱 getsockopt 和 setsockopt 函式參考頁面。

若要列舉每個已安裝通訊協定的通訊協定和探索支援的屬性,請使用WSAEnumProtocolsWSCEnumProtocols WSCEnumProtocols32 函式。

某些套接字選項需要比這些數據表所能傳達更多的說明;這類選項包含其他頁面的連結。

Note

所有 SOL_SOCKET 套接字選項對 IPv4 和 IPv6 都是一樣適用的(SO_BROADCAST除外,因為 IPv6 中沒有實作廣播功能)。

 

SOL_SOCKET 插座選項

Option Get Set Optval 類型 Description
PVD_CONFIG yes yes 查爾 [] 一個不透明的資料結構物件,包含服務提供者的組態資訊。 此選項視實作而定。
SO_ACCEPTCONN yes DWORD (布爾值) 傳回通訊端是否處於接聽模式。 此選項僅對連線導向通訊協定有效。
SO_BROADCAST yes yes DWORD (布爾值) 設定一個socket來傳送廣播資料。 此選項僅適用於支援廣播的協定(例如 IPX 和 UDP)。
SO_BSP_STATE yes CSADDR_INFO 回傳本地位址、本地埠、遠端位址、遠端埠、套接字類型及套接字所使用的協定。 更多資訊請參閱 SO_BSP_STATE 參考資料。
SO_CONDITIONAL_ACCEPT yes yes DWORD (布爾值) 表示應用程式應接受或拒絕接收的連線,而非協定堆疊。 更多資訊請參閱 SO_CONDITIONAL_ACCEPT 參考資料。
SO_CONNDATA yes yes 查爾 [] 額外資料,不在一般網路資料流中,隨網路請求傳送以建立連線。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_CONNDATALEN yes DWORD 額外資料的長度(以位元組計),這些資料不屬於一般網路資料流,隨網路請求傳送以建立連線。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_CONNECT_TIME yes DWORD 回傳一個插座已連接的秒數。 此選項僅適用於連線導向協定。
SO_CONNOPT yes yes 查爾 [] 額外的連接選項資料,不在一般網路資料流中,隨網路請求一同傳送以建立連線。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_CONNOPTLEN yes DWORD 連接選項資料的長度(位元組),非一般網路資料流,隨網路請求以建立連線而傳送。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_DISCDATA yes yes 查爾 [] 額外的資料,不在一般網路資料流中,隨網路請求傳送以斷開連線。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_DISCDATALEN yes DWORD 額外資料的長度(以位元組為單位),這些資料不屬於一般網路資料流,隨網路請求以斷開連線而傳送。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_DISCOPT yes yes 查爾 [] 額外的斷線選項資料,不在一般網路資料流中,隨網路請求一同傳送以斷開連線。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_DISCOPTLEN yes DWORD 額外斷線選項資料的長度(以位元組計),這些資料不屬於一般網路資料流,隨網路請求以斷開連線而傳送。 此選項被傳統協定如 DECNet、OSI TP4 等使用。 這個選項在 Windows 的 TCP/IP 協定中並不支援。
SO_DEBUG yes yes DWORD (布爾值) 啟用除錯輸出。 Microsoft 提供者目前不會輸出任何偵錯資訊。
SO_DONTLINGER yes yes DWORD (布爾值) 表示與套接字相關聯的殘留物結構中l_onoff成員的狀態。 若此成員非零,則在關閉 接字函式呼叫以啟用佇列資料後,該套接字會保持開啟指定時間。 此選項僅適用於可靠且面向連線的協定。
SO_DONTROUTE yes yes DWORD (布爾值) 表示輸出資料應該傳送到該套接字綁定的介面,而不是路由到其他介面。 此選項僅適用於訊息導向協定。 Microsoft 供應商默默忽略這個選項,總是參考路由表來找出合適的輸出介面。
SO_ERROR yes DWORD 會回傳這個插槽上最後的錯誤代碼。 這個每個插槽的錯誤碼並不總是會立即設定。
SO_EXCLUSIVEADDRUSE yes yes DWORD (布爾值) 防止其他任何套接字綁定到相同的位址和埠口。 此選項必須先設定,才能呼叫 綁定 函式。 更多資訊請參閱 SO_EXCLUSIVEADDRUSE 參考資料。
SO_GROUP_ID yes 無符號整數 此插座選項為保留,不應使用。
SO_GROUP_PRIORITY yes yes int 此插座選項為保留,不應使用。
SO_KEEPALIVE yes yes DWORD (布爾值) 啟用 Keep-Alive 連接插槽。 僅適用於支援保持活著(keep-alive)概念的協定(連線導向協定)。 對於 TCP,預設的保活逾時為 2 小時,保活間隔為 1 秒。 預設的保持活體探針數量會依 Windows 版本而異。 更多資訊請參見 SO_KEEPALIVE 參考資料。
SO_LINGER yes yes 結構 持續 表示與套接字相關的 殘留 物結構狀態。 如果 linger 結構的 l_onoff 成員非零,則在 closesocket 函式呼叫以啟用佇列資料後,該 socket 會保持開啟指定時間。 保持開啟的時間(以秒計)在殘留器結構的l_linger成員中指定。 此選項僅適用於可靠且面向連線的協定。
SO_MAX_MSG_SIZE yes DWORD 回傳協定支援的訊息導向套接字的最大外發訊息大小。 對於串流導向的套接字則沒有意義。
SO_MAXDG yes DWORD 回傳協定支援的出站資料報的最大大小(位元組)。 這個套接字選項對於串流導向的套接字沒有意義。
SO_MAXPATHDG yes DWORD 回傳協定支援的出站資料報到指定目的位址的最大大小(位元組)。 這個套接字選項對於串流導向的套接字沒有意義。 Microsoft醫療提供者可能會默默地將此視為SO_MAXDG。
SO_OOBINLINE yes yes DWORD (布爾值) 指出越界資料應該與一般資料內嵌傳回。 此選項僅適用於支援頻外資料的連線導向通訊協定。
SO_OPENTYPE yes yes DWORD 一旦設定,會影響後續建立的套接字是否會不重疊。 此選項的可能值為SO_SYNCHRONOUS_ALERT與SO_SYNCHRONOUS_NONALERT。 此選項不應使用。 請使用 WSASocket 函式,並將 dwFlags 參數中的 WSA_FLAG_OVERLAPPED 位元關閉。
SO_PAUSE_ACCEPT yes yes DWORD(布爾值) 用這個選項來接聽插座。 當選項設定完成時,套接字會以 RST 回應所有進來的連線,而非接受它們。
SO_PORT_SCALABILITY yes yes DWORD (布爾值) 透過在本地機器上為不同位址埠對多次分配通配卡埠,最大化埠位分配,實現本地埠的可擴展性。 在同時提供這兩種選項的平台上,建議選擇SO_REUSE_UNICASTPORT而非這個選項。 更多資訊請參閱 SO_PORT_SCALABILITY 參考資料。
SO_PROTOCOL_INFO yes WSAPROTOCOL_INFO 若定義了 UNICODE 巨集,此選項會被定義為 SO_PROTOCOL_INFOW socket 選項。 若 UNICODE 巨集未定義,則此選項會被定義為 SO_PROTOCOL_INFOA socket 選項。
SO_PROTOCOL_INFOA yes WSAPROTOCOL_INFOA 回傳給定套接字的 WSAPROTOCOL_INFOA 結構
SO_PROTOCOL_INFOW yes WSAPROTOCOL_INFOW 回傳給定套接字的 WSAPROTOCOL_INFOW 結構
SO_RANDOMIZE_PORT yes yes DWORD(布爾值) 這個選項應該設定在未綁定的套接字上。 當SO_RANDOMIZE_PORT設定並選擇短接字上的臨時埠時,會綁定一個隨機埠號。 自動重用埠(使用 SO_REUSE_UNICASTPORT 選擇的埠)也會隨機化回傳的埠,因此如果應用程式設定 SO_REUSE_UNICASTPORT 後再嘗試設定 SO_RANDOMIZE_PORT,第二次 setsockopt 呼叫會失敗。
SO_RCVBUF yes yes DWORD 每個插槽保留給接收的總緩衝區空間。 這與 SO_MAX_MSG_SIZE 無關,也不一定對應 TCP 接收視窗的大小。
SO_RCVLOWAT yes yes DWORD 包含 BSD UNIX 的套接字選項,以向後相容。 此選項會設定要處理通訊端輸入作業的最小位元組數。 此選項不被 Windows TCP/IP 提供者支援。 若此選項在 Windows Vista 及以後版本使用,getsockoptsetsockopt 函式在 WSAEINVAL 中會失效。 在較早期的 Windows 版本中,這些功能在 WSAENOPROTOOPT 時會失效。
SO_RCVTIMEO yes yes DWORD 阻擋接收通話的逾時時間以毫秒計。 此選項的預設值為零,表示接收操作不會逾時。如果阻擋接收通話逾時,該連線處於不確定狀態,應該關閉。
如果套接字是使用 WSASocket 函式建立的,那麼 dwFlags 參數必須設定 WSA_FLAG_OVERLAPPED 屬性,逾時才能正常運作。 否則,超時永遠不會生效。
SO_REUSEADDR yes yes DWORD (布爾值) 允許套接字綁定到已使用的位址和埠口。 SO_EXCLUSIVEADDRUSE選項可以避免這種情況。
SO_REUSE_UNICASTPORT yes yes DWORD (布爾值) 設定後,允許暫時埠重用於需要明確綁定的 Winsock API 連線函式,例如 ConnectEx。 請注意,帶有隱含綁定的連線函式(例如無明確綁定連接)預設會設定此選項。 請使用這個選項,而不是在同時提供兩者的平台上 SO_PORT_SCALABILITY
SO_REUSE_MULTICASTPORT yes DWORD 當設定在某個套接字上時,此選項表示該套接字永遠不會被用來接收單播封包,因此其埠可以與其他純多播應用程式共用。 將 值設為 1 後,埠口上可持續共享多播流量。 將值設為 0(預設值)會關閉此行為。
SO_SNDBUF yes yes DWORD 每個套接字預留給傳送的總緩衝區空間。 這與 SO_MAX_MSG_SIZE 無關,也不一定對應於 TCP 傳送視窗的大小。
SO_SNDLOWAT yes yes DWORD 包含 BSD UNIX 的套接字選項,以向後相容。 此選項會設定要處理通訊端輸出作業的最小位元組數。 此選項不被 Windows TCP/IP 提供者支援。 若此選項在 Windows Vista 及以後版本使用,getsockoptsetsockopt 函式在 WSAEINVAL 中會失效。 在較早期的 Windows 版本中,這些功能在 WSAENOPROTOOPT 時會失效。
SO_SNDTIMEO yes yes DWORD 封鎖傳送呼叫的逾時 (以毫秒為單位)。 此選項的預設值為零,表示傳送操作不會逾時。如果阻擋發送呼叫逾時,該連線處於不確定狀態,應該已關閉。
如果套接字是使用 WSASocket 函式建立的,那麼 dwFlags 參數必須設定 WSA_FLAG_OVERLAPPED 屬性,逾時才能正常運作。 否則,超時永遠不會生效。
SO_TYPE yes DWORD 回傳該套筒的套筒類型(例如 SOCK_STREAM 或 SOCK_DGRAM)。
SO_UPDATE_ACCEPT_CONTEXT yes DWORD (布爾值) 此選項用於 AcceptEx 函式。 此選項會更新從監聽套接字繼承來的套接字屬性。 若要對接受的套接字使用 getpeernamegetsocknamegetsockoptsetsockopt 函式,則應設定此選項。
SO_UPDATE_CONNECT_CONTEXT yes DWORD (布爾值) 此選項用於 ConnectExWSAConnectByListWSAConnectByName 函式。 此選項會在連線建立後更新套接字的屬性。 如果要在連接的插槽上使用 getpeernamegetsocknamegetsockoptsetsockoptshutdown 函式,則應設定此選項。
SO_USELOOPBACK yes yes DWORD (布爾值) 從這個套接字傳送資料時,使用本地迴圈位址。 此選項僅在所有資料都會在本地接收時使用。 此選項不被 Windows TCP/IP 提供者支援。 若此選項在 Windows Vista 及以後版本使用,getsockoptsetsockopt 函式在 WSAEINVAL 中會失效。 在較早期的 Windows 版本中,這些功能在 WSAENOPROTOOPT 時會失效。

Windows 支援SOL_SOCKET選項

Option Windows 10 Windows 7 Windows Server 2008 Windows Vista Windows Server 2003 Windows XP Windows 2000 Windows NT4 Windows 9x/ME
PVD_CONFIG
SO_ACCEPTCONN yes yes yes yes yes yes yes yes yes
SO_BROADCAST yes yes yes yes yes yes yes yes yes
SO_BSP_STATE yes yes yes yes
SO_CONDITIONAL_ACCEPT yes yes yes yes yes yes yes
SO_CONNDATA yes yes yes yes yes yes yes yes
SO_CONNDATALEN yes yes yes yes yes yes yes yes
SO_CONNECT_TIME yes yes yes yes yes yes yes yes yes
SO_CONNOPT yes yes yes yes yes yes yes yes
SO_CONNOPTLEN yes yes yes yes yes yes yes yes
SO_DISCDATA yes yes yes yes yes yes yes yes
SO_DISCDATALEN yes yes yes yes yes yes yes yes
SO_DISCOPT yes yes yes yes yes yes yes yes
SO_DISCOPTLEN yes yes yes yes yes yes yes yes
SO_DEBUG yes yes yes yes yes yes yes yes yes
SO_DONTLINGER yes yes yes yes yes yes yes yes yes
SO_DONTROUTE yes yes yes yes yes yes yes yes yes
SO_ERROR yes yes yes yes yes yes yes yes yes
SO_EXCLUSIVEADDRUSE yes yes yes yes yes yes yes 是的,SP4+
SO_GROUP_ID yes yes yes yes
SO_GROUP_PRIORITY yes yes yes yes
SO_KEEPALIVE yes yes yes yes yes yes yes yes yes
SO_LINGER yes yes yes yes yes yes yes yes yes
SO_MAX_MSG_SIZE yes yes yes yes yes yes yes yes yes
SO_MAXDG yes yes yes yes yes yes yes
SO_MAXPATHDG yes yes yes yes yes yes yes
SO_OOBINLINE yes yes yes yes yes yes yes yes yes
SO_OPENTYPE yes yes yes yes yes yes yes yes yes
SO_PORT_SCALABILITY yes yes yes
SO_PROTECT yes
SO_PROTOCOL_INFO yes yes yes yes yes yes yes yes yes
SO_PROTOCOL_INFOA yes yes yes yes yes yes yes yes yes
SO_PROTOCOL_INFOW yes yes yes yes yes yes yes yes yes
SO_RCVBUF yes yes yes yes yes yes yes yes yes
SO_RCVLOWAT
SO_RCVTIMEO yes yes yes yes yes yes yes yes yes
SO_RANDOMIZE_PORT yes yes yes yes
SO_REUSEADDR yes yes yes yes yes yes yes yes yes
SO_REUSE_UNICASTPORT yes
SO_REUSE_MULTICASTPORT yes
SO_SNDBUF yes yes yes yes yes yes yes yes yes
SO_SNDLOWAT
SO_SNDTIMEO yes yes yes yes yes yes yes yes yes
SO_TYPE yes yes yes yes yes yes yes yes yes
SO_UPDATE_ACCEPT_CONTEXT yes yes yes yes yes yes yes yes
SO_UPDATE_CONNECT_CONTEXT yes yes yes yes yes yes
SO_USELOOPBACK

Remarks

SOL_SOCKET套接字選項在多個 Winsock 標頭檔案中定義:

  • Winsock2.h
  • Mswsock.h
  • Ws2def.h

在Windows Vista及以後發行的Microsoft Windows軟體開發套件(SDK)中,標頭檔案的組織方式有所改變,SOL_SOCKET層級由 Ws2def.h 標頭檔定義,而 Ws2def.h 標頭檔會自動包含在 Winsock2.h 標頭檔中。 部分 SOL_SOCKET 套接字選項定義於 Winsock2.hMswsock.h 標頭檔案中。 其餘 SOL_SOCKET 套接字選項定義於 Ws2def.h 標頭檔中,該標頭檔案會自動包含於 Winsock2.h 標頭檔中。 Ws2def.h 絕對不應該直接使用。

在 2003 Windows Server 及 Windows XP 年發行的 Platform Software Development Kit(SDK)中,SOL_SOCKET層定義於 Winsock2.h 標頭檔中。 SOL_SOCKET 套接字選項定義於 Winsock2.hMswsock.h 標頭檔案中。

Requirements

Requirement 價值
Header
Winsock2.h;
Mswsock.h;
Ws2def.h(包括 Winsock2.h)