?? 14.3.1 wsastartup函數.txt
字號:
14.3.1 WSAStartup函數
在利用套接字編程時,第一步需要加載套接字庫,這通過 WSAStartup函數來實現。該函數有兩
個功能:一是加載套接字庫,一是進行套接字庫的版本協商,也就是確定將使用的 socket版本。
該函數的原型聲明如下所示:
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );
WSAStartup函數有兩個參數,其含義分別如下所述:
. wVersionRequested
用來指定準備加載的 Winsock庫的版本。高位字節指定所需要的 Winsock庫的副版本,而低位字
節則是主版本。通常版本號為: 2.1,其中 2就是主版本號, 1就是副版本號。可以利用 MAKEWORD
(x, y)宏(其中 x是高位字節, y是低位字節)方便地獲得 wVersion Requested的正確值。
. lpWSAData
這是一個返回值,指向 WSADATA結構的指針, WSAStartup函數用其加載的庫版本有關的信息填
在這個結構中。
WSADATA結構的定義如下所示:
typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN +1] ;
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorlnfo;
} WSADATA , *LPWSADATA;
WSAStartup函數把 WSAData結構中的第一個字段 wVersion設置為打算使用的 Winsock版本。
wHighVersion字段容納的是現有的 Winsock庫的最高版本。記住,這兩個字段中,高位字節代表
的是 Winsock副版本,而低位字節代表的則是 Winsock主版本。 szDescription和
szSystemStatus這兩個字段由特定的 Winsock實施方案設定,事實上并沒有用。不要使用下面這
兩個字段: iMaxSockets和 iMaxUdpDg,它們是假定同時最多可打開多少套接字和數據報的最大
長度。然而,要知道數據報的最大長度應該通過 WSAEnumProtocols函數來查詢協議信息。同時
最多可打開套接字的數目不是固定的,很大程度上和可用物理內存的多少有關。最后,
lpVendorlnfo字段是為 Winsock實施方案有關的指定廠商信息預留的,任何一個 Win32平臺上都
沒有使用這個字段。
如果 Ws2_32.lib或底層網絡子系統沒有被正確地初始化或沒有被找到, WSAStartup 函數將返
回 WSASYSNOTREADY。此外,這個函數允許你的應用程序協商使用某種版本的 WinSock規范,如
果請求的版本等于或高于 WinSock動態庫所支持的最低版本, WSAData的 wVersion成員中將包
含你的應用程序應該使用的版本,它是動態庫所支持的最高版本與請求版本中較小的那個。反之,
如果請求的版本低于 WinSock動態庫所支持的最低版本, WSAStartup函數將返回
WSAVERNOTSUPPORTED。關于 WSAStartup函數更詳細的信息,請查閱 MSDN中相關內容。
對于每一個 WSAStartup函數的成功調用(即成功加載 WinSock動態庫后),在最后都對應一個
WSACleanUp調用,以便釋放為該應用程序分配的資源,終止對 WinSock動態庫的使用。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -