WinSock WSAStartupについて
WSAStartupは以下のように定義されている。
int WSAStartup( __in WORD wVersionRequested, //使用したいWinSockのバージョン __out LPWSADATA lpWSAData //WSADATA構造体へのポインタ );
WSAStartupの戻り値は、以下のとおり
戻り値 | 説明 |
WSASYSNOTREADY | 基礎となるネットワークサブシステムが、ネットワーク通信の準備ができていない |
WSAVERNOTSUPPORTED | 要求されたWinSockのバージョンは、この特定のWinSockの実装では提供されていない |
WSAEINPROGRESS | WinSock1.1によるブロッキング操作は、現在進行中です |
WSAEPROCLIM | WinSockがサポートしているタスク数の制限に達した |
WSAEFAULT | lpWSAData引数は有効なポインタではない |
WSADATA構造体
struct WSAData { WORD wVersion;//呼び出し側に求めるWinSockのバージョン WORD wHighVersion;//WinSockがサポートしている最も高いバージョン char szDescription[WSADESCRIPTION_LEN+1];//WinSockの実装の記述 char szSystemStatus[WSASYSSTATUS_LEN+1];//WinSockの関連ステータスまたは構成情報 unsigned short iMaxSockets;//1つのプロセスが開くことができる最大のソケット数 unsigned short iMaxUdpDg;//WinSockにより送受信できる最大データグラムサイズ char FAR * lpVendorInfo;//ベンダー固有データ(WinSockの仕様のスコープ外) };
WSAStartupでWinSockの初期化に成功すれば、関数から得られたwsaDataの値を表示する。ここでは、Winsock1.1を使用しているため、実行結果には、Winsock Versionが1.1と表示される。エラーの場合は、関数の戻り値からその原因を特定しコンソールに表示する。最後に、WSACleanupでWinSockのリソースを解放する。
#include <stdio.h> #include <winsock.h> #pragma comment(lib, "wsock32.lib") int main() { WSADATA wsaData; int nRet; nRet = WSAStartup(MAKEWORD(1, 1), &wsaData); if (nRet == 0) { printf("WinSock Version: %d.%d\n", HIBYTE(wsaData.wVersion), LOBYTE(wsaData.wVersion)); printf("High Version: %d.%d\n", HIBYTE(wsaData.wHighVersion), LOBYTE(wsaData.wHighVersion)); printf("Description: %s\n", wsaData.szDescription); printf("SystemStatus: %s\n", wsaData.szSystemStatus); printf("MaxUdpDg: %d\n", wsaData.iMaxUdpDg); printf("MaxSockets: %d\n", wsaData.iMaxSockets); } else { fprintf(stderr, "WSAStartup() Error %d\n", nRet); switch (nRet) { case WSASYSNOTREADY: puts("WSASYSNOTREADY"); break; case WSAVERNOTSUPPORTED: puts("WSAVERNOTSUPPORTED"); break; case WSAEINPROGRESS: puts("WSAEINPROGRESS"); break; case WSAEPROCLIM: puts("WSAEPROCLIM"); break; case WSAEFAULT: puts("WSAEFAULT"); break; default: puts("Other error"); break; } } WSACleanup(); return 0; }
実行結果
WinSock Version: 1.1 High Version: 2.2 Description: WinSock 2.0 SystemStatus: Running MaxUdpDg: 65467 MaxSockets: 32767
参考:
http://msdn.microsoft.com/en-us/library/ms742213.aspx
http://msdn.microsoft.com/ja-jp/library/ms931137.aspx