LPWSPBIND 回呼函式 (ws2spi.h)
LPWSPBind 函式會將本機地址關聯 (,也就是名稱) 與套接字。
語法
LPWSPBIND Lpwspbind;
int Lpwspbind(
[in] SOCKET s,
[in] const sockaddr *name,
[in] int namelen,
[out] LPINT lpErrno
)
{...}
參數
[in] s
識別未系結套接字的描述項。
[in] name
要指派給套接字的位址,格式為 sockaddr 結構。
除了 sa_family 成員之外, sockaddr 內容會以網路位元組順序表示。 在 Windows Sockets 2 中, name 參數不會嚴格解譯為 sockaddr 結構的指標。 這是針對 Winsock 相容性而以這種方式轉型。 在不同位址系列的內容中,實際結構會以不同的方式解譯。 唯一的需求是第一 個u_short 是位址系列,而記憶體緩衝區的大小總計,以位元組為單位是 namelen。
[in] namelen
name 參數所指向之結構的長度,以位元組為單位。
[out] lpErrno
錯誤碼的指標。
傳回值
如果沒有發生錯誤, LPWSPBind 會傳回零。 否則,它會傳回SOCKET_ERROR,而且 lpErrno 中提供特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
網路子系統失敗。 | |
本機計算機上的某些程式已經系結至相同的完整位址 (例如,**AF_INET** 案例中的IP位址和埠) ,而且套接字尚未標示為允許使用 SO_REUSEADDR 重複使用位址。 (請參閱 LPWSPSetSockOpt.) 底下的 SO_REUSEADDR 套接字選項 | |
指定的位址不是這部計算機的有效位址。 | |
name 或 namelen 參數不是使用者位址空間的有效部分、namelen 參數太小、名稱參數包含關聯位址系列不正確的位址格式,或名稱所指定記憶體區塊的前兩個字節不符合與套接字描述元相關聯的位址系列。 | |
當回呼正在進行時,就會叫用函式。 | |
套接字已經系結至位址。 | |
沒有足夠的緩衝區可用,連線太多。 | |
描述項不是套接字。 |
備註
在後續呼叫 LPWSPConnect 或 LPWSPListen 函式之前,LPWSPBind 函式會用於未連線的無連線或連接導向套接字上。 使用 LPWSPSocket 建立套接字時,它存在於命名空間中 (位址系列) ,但它沒有指派名稱或本機位址。 LPWSPBind 函式會將本機名稱指派給未命名的套接字,以建立套接字的本機關聯。
例如,在因特網位址系列中,名稱包含三個部分:位址系列、主機位址,以及識別 Winsock SPI 用戶端的埠號碼。 在 Windows Sockets 2 中, name 參數不會嚴格解譯為 sockaddr 結構的指標。 服務提供者可以將其視為 namelen 記憶體區塊的指標。 此區塊中的前兩個字節 (對應至 sockaddr 宣告中的sa_family,) 必須包含用來建立套接字的位址系列。 否則,將會指出 WSAEFAULT 錯誤。
如果 Windows Sockets 2 SPI 用戶端不關心指派的本機位址,它會指定名稱參數sa_data成員的指令清單常數值ADDR_ANY。 這會指示服務提供者使用任何適當的網路位址。 針對 TCP/IP,如果埠指定為零,服務提供者會將唯一埠指派給 Winsock SPI 用戶端,其值介於 1024 和 5000 之間。 SPI 用戶端可以在 LPWSPBind 之後使用 LPWSPGetSockName 來瞭解已指派給它的位址和埠。 不過,請注意,如果因特網位址等於 INADDR_ANY,LPWSPGetSockOpt 將不會一定能夠提供位址,直到套接字聯機為止,因為如果主機多路連接,則數個位址可能有效。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
標頭 | ws2spi.h |