LPWSPGETSOCKOPT 回呼函式 (ws2spi.h)
LPWSPGetSockOpt 函式會擷取套接字選項。
語法
LPWSPGETSOCKOPT Lpwspgetsockopt;
int Lpwspgetsockopt(
SOCKET s,
int level,
int optname,
char *optval,
LPINT optlen,
LPINT lpErrno
)
{...}
參數
s
識別套接字的描述項。
level
定義選項的層級;支援的層級包括 SOL_SOCKET。 (請參閱更多通訊協定特定層級的附錄。)
optname
要擷取值的套接字選項。
optval
要傳回所要求選項值的緩衝區指標。
optlen
optval 緩衝區的大小指標,以位元組為單位。
lpErrno
錯誤碼的指標。
傳回值
如果沒有發生錯誤, LPWSPGetSockOpt 會傳回零。 否則會傳回SOCKET_ERROR的值,並在 lpErrno 中提供特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
網路子系統失敗。 | |
其中一個 optval 或 optlen 參數不是使用者地址空間的有效部分,或 optlen 參數太小。 | |
層級未知或無效。 | |
當回呼正在進行時,就會叫用函式。 | |
選項未知或不受指定的通訊協定系列支援。 | |
描述項不是套接字。 |
備註
LPWSPGetSockOpt 函式會擷取與任何類型套接字、處於任何狀態的套接字選項相關聯的目前值,並將結果儲存為 optval。 選項可以存在於多個通訊協定層級,但它們一律存在於最上層的套接字層級。 選項會影響套接字作業,例如封包和 OOB 數據傳輸的路由。
與所選取選項相關聯的值會在緩衝區 選擇值中傳回。 optlen 所指向的整數應該原本包含這個緩衝區的大小;在傳回時,它會設定為傳回之值的大小。 若為SO_LINGER,這會是結構的後置大小;對於大部分的其他選項,它會是整數的大小。
Windows Sockets SPI 用戶端負責配置它所指定任何參數直接或間接指向的任何記憶體空間。
如果從未使用 LPWSPSetSockOpt 設定選項, 則 LPWSPGetSockOpt 會傳回選項的預設值。
如需套接字選項的詳細資訊,請參閱 套接字選項。
level = SOL_SOCKET
值 | 類型 | 意義 | Default |
---|---|---|---|
SO_ACCEPTCONN | BOOL | 套接字正在透過 LPWSPListen 接聽。 | 除非 已執行 LPWSPListen ,否則為 FALSE。 |
SO_BROADCAST | BOOL | 套接字會針對廣播訊息的傳輸和接收進行設定。 | FALSE |
SO_DEBUG | BOOL | 已啟用偵錯。 | FALSE |
SO_DONTLINGER | BOOL | 如果為 true,則會停用SO_LINGER選項。 | TRUE |
SO_DONTROUTE | BOOL | 路由已停用。 設定此套接字選項會成功,但會在AF_INET套接字上忽略;在具有 WSAENOPROTOOPT 的AF_INET6套接字上失敗。 ATM 套接字不支援此選項, (會導致錯誤) 。 | FALSE |
SO_ERROR | 整數 | 擷取錯誤狀態並清除。 | 0 |
SO_GROUP_ID | GROUP | 保留的。 | Null |
SO_GROUP_PRIORITY | 整數 | 保留的。 | 0 |
SO_KEEPALIVE | BOOL | 正在傳送 Keepalives。 在 ATM 套接字上不支援 (會導致錯誤) 。 | FALSE |
SO_LINGER | LINGER 結構 | 傳回目前的linger 選項。 | 1 在預設) 開啟 (,0 為關閉 |
SO_MAX_MSG_SIZE | 不帶正負號的整數 | 例如,訊息導向套接字類型的訊息大小上限 (SOCK_DGRAM) 。 對數據流導向套接字沒有意義。 | 實作相依 |
SO_OOBINLINE | BOOL | OOB 數據正在一般數據流中接收。 | FALSE |
SO_PROTOCOL_INFO | WSAPROTOCOL_INFO 結構 | 系結至此套接字之通訊協議的通訊協議資訊描述。 | 通訊協定相依 |
SO_RCVBUF | 整數 | 保留給接收的個別套接字緩衝區空間總計。 這與SO_MAX_MSG_SIZE無關,而且不一定對應至 TCP 接收視窗的大小。 | 實作相依 |
SO_REUSEADDR | BOOL | 套接字可以系結至已在使用的位址。 此選項不適用於 ATM 套接字。 | FALSE: |
SO_SNDBUF | 整數 | 保留給傳送的每個套接字緩衝區空間總計。 這與SO_MAX_MSG_SIZE無關,而且不一定對應至 TCP 傳送視窗的大小。 | 實作相依 |
SO_TYPE | 整數 | 例如,套接字 (的類型,SOCK_STREAM) 。 | 如同使用 LPWSPSocket 建立的“>LPWSPSocket |
PVD_CONFIG | 服務提供者相依 | 與 套接字相關聯之服務提供者的不透明數據結構物件。 此物件會儲存服務提供者的目前組態資訊。 此數據結構的確切格式是服務提供者特定的。 | 實作相依 |
以不支援的選項呼叫 LPWSPGetSockOpt 會導致在 lpErrno 中傳回 WSAENOPROTOOPT 的錯誤碼。
-
SO_DEBUG
-
如果 Windows Sockets SPI 用戶端設定了 SO_DEBUG 選項,則建議 (但不需要) 提供輸出偵錯資訊。 產生偵錯信息的機制及其採用的格式超出此規格的範圍。
-
SO_ERROR
-
SO_ERROR選項會傳回並重設每個套接字型錯誤碼, (不一定與 WS2_32.DLL) 所維護的每個線程錯誤碼相同。 套接字上成功的 Windows 套接字呼叫不會重設 SO_ERROR 選項所傳回的套接字型錯誤碼。
-
SO_GROUP_ID
-
保留的。 此值應該是 NULL。
-
SO_GROUP_PRIORITY
-
保留的。
-
Windows Sockets SPI 用戶端可以藉由開啟 [SO_KEEPALIVE 套接字] 選項,要求 TCP/IP 服務提供者啟用在 TCP 連線上使用保持運作封包。 Windows Sockets 提供者不需要支援使用keep-alives:如果是,精確語意是特定的實作,但應符合 RFC 1122: 通訊層的需求第 4.2.3.6 節。 (此資源只能以英文提供。) 如果連線因保持運作而中斷,則會將錯誤碼 WSAENETRESET 傳回至套接字上進行的任何呼叫,且任何後續的呼叫都會因為 WSAENOTCONN 而失敗。
-
SO_LINGER
-
SO_LINGER控制在套接字上排入未傳送數據時所採取的動作,並執行 LPWSPCloseSocket 。 如需SO_LINGER設定影響 LPWSPCloseSocket 語意的描述,請參閱 LPWSPCloseSocket。 Windows Sockets SPI 用戶端會建立 LINGER 結構, (optval 參數所指向的 LINGER 結構,) 下列元素來取得所需的行為:
}
-
SO_MAX_MSG_SIZE
-
這是僅限取得的套接字選項,表示訊息導向套接字 (類型的輸出傳送訊息大小上限,例如服務提供者所實作SOCK_DGRAM) 。 它對位元組數據流導向套接字沒有意義。 沒有布建可判斷輸入訊息大小上限。
-
SO_PROTOCOL_INFOW
-
這是唯一選項,可提供與此套接字相關聯的 WSAPROTOCOL_INFO 結構。 如需此結構的詳細資訊,請參閱 WSCEnumProtocols 。
-
SO_SNDBUF
-
當 Windows Sockets 服務提供者支援SO_RCVBUF和SO_SNDBUF選項時,Windows Sockets SPI 用戶端可以使用 LPWSPSetSockOpt 來要求不同的緩衝區大小, (較大或較小的) 。 即使服務提供者未提供所要求的整個金額,呼叫仍可成功。 Windows Sockets SPI 用戶端必須使用相同的選項呼叫此函式,才能檢查實際提供的緩衝區大小。
-
SO_REUSEADDR
-
根據預設,套接字無法系結 (看到 LPWSPBind) 已使用中的本機位址。 不過,有時候,建議您以這種方式重複使用位址。 由於每個連線都是由本機和遠端位址的組合所唯一識別,因此只要遠端位址不同,兩個套接字系結至相同的本機位址就沒有任何問題。 若要通知 Windows Sockets 提供者,應該允許套接字上的 LPWSPBind 系結至已由另一個套接字使用的本機位址,Windows Sockets SPI 用戶端應該先設定套接字的SO_REUSEADDR套接字選項,再發出 LPWSPBind。 請注意,只有在 LPWSPBind 時才會解譯選項。 因此,不需要 (但無損害的) ,在未系結至現有位址的套接字上設定選項,並在 LPWSPBind 之後設定或重設選項不會影響此或任何其他套接字。
-
PVD_CONFIG
-
此選項會從 與套接字相關聯的服務提供者擷取不透明的數據結構物件。 此物件會儲存服務提供者的目前組態資訊。 此數據結構的確切格式是服務提供者特定的。
規格需求
需求 值 最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式] 最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式] 標頭 ws2spi.h 另請參閱