WSAGetLastError

WSAGetLastError関数は失敗した最後のWinsock関数に対するエラーステータスを返します。

int WSAGetLastError();

WS2_32.DLL

戻り値

現在のスレッドで失敗した最後のWinsock関数に対するエラーコードを示す値を返します。

解説

WSAGetLastError関数は呼び出しスレッドで発生した最後のエラーを返します。特定のWinsock関数がエラーの発生を示した場合、直ちにこの関数を呼び出して失敗した関数呼び出しに対する拡張エラーコードを取得するべきです。この拡張エラーコードはgetsockopt関数のoptnameパラメータにSO_ERRORを渡して取得されるエラーコードと異なる可能性があります。getsockopt関数は個々のソケットに関するエラーコードを返すのに対し、WSAGetLastError関数はそのスレッドにおけるすべてのソケットに関するエラーコードを返します。

関数呼び出しの戻り値がエラーまたはその他の関連データがエラーコードで返されたことを示している場合は、直ちにWSAGetLastError関数を呼び出すべきです。いくつかの関数は成功時にも最終拡張エラーコードを0にリセットして、以前の失敗した関数が返した拡張エラーコードを上書きしてしまう可能性があるため、そのようにする必要があります。明確に拡張エラーコードをリセットするには、iErrorパラメータに0を指定してWSASetLastError関数を呼び出します。optnameパラメータにSO_ERRORを渡してgetsockopt関数を呼び出す場合にも、拡張エラーコードが0にリセットされます。

非同期メッセージ受信時の拡張エラー値を決定するためにWSAGetLastError関数を使用するべきではありません。このような場合は、メッセージのlParamパラメータに拡張エラーコードが渡されます。この拡張エラーコードはWSAGetLastError関数から返される値と異なる可能性があります。

Note: WSAStartup関数が失敗した場合や、Winsock関数を呼び出す前にWSAStartup関数を呼び出してWinsockを正しく初期化していない場合であっても、アプリケーションはWSAGetLastError関数を呼び出して他のWinsock関数に関する拡張エラーコードを決定することができます。WSAGetLastError関数は、Winsock 2.2 DLLにおける関数の中で、WSAStartup関数が失敗した場合でも呼び出すことができる唯一の関数です。

この関数が返すWinsock拡張エラーコードおよびエラーコードに関連付けられている短いテキストの記述がWInerror.hヘッダに定義されています。また、FormatMessageを使用してエラーコードに対するメッセージ文字列を取得することができます。