以下表格描述 SOL_SOCKET 套接字選項。 如需取得和設定套接字選項的詳細資訊,請參閱 getsockopt 和 setsockopt 函式參考頁面。
若要列舉每個已安裝通訊協定的通訊協定和探索支援的屬性,請使用WSAEnumProtocols、WSCEnumProtocols 或 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 及以後版本使用,getsockopt 與 setsockopt 函式在 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 及以後版本使用,getsockopt 與 setsockopt 函式在 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 函式。 此選項會更新從監聽套接字繼承來的套接字屬性。 若要對接受的套接字使用 getpeername、 getsockname、 getsockopt或 setsockopt 函式,則應設定此選項。 | |
| SO_UPDATE_CONNECT_CONTEXT | yes | DWORD (布爾值) | 此選項用於 ConnectEx、 WSAConnectByList 及 WSAConnectByName 函式。 此選項會在連線建立後更新套接字的屬性。 如果要在連接的插槽上使用 getpeername、 getsockname、 getsockopt、 setsockopt 或 shutdown 函式,則應設定此選項。 | |
| SO_USELOOPBACK | yes | yes | DWORD (布爾值) | 從這個套接字傳送資料時,使用本地迴圈位址。 此選項僅在所有資料都會在本地接收時使用。 此選項不被 Windows TCP/IP 提供者支援。 若此選項在 Windows Vista 及以後版本使用,getsockopt 與 setsockopt 函式在 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.h 與 Mswsock.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.h 與 Mswsock.h 標頭檔案中。
Requirements
| Requirement | 價值 |
|---|---|
| Header |
|