エラー内容の取得
ここでは、winsockのエラー内容を取得するWSAGetLastError()の利用方法を説明したいと思います。
WSAGetLastError
エラーが発生したとき、場合によっては何が原因であるか知る必要があります。 winsockでは、WSAGetLastError()を利用するとエラー内容を取得できます。
以下にWSAGetLastError()利用例を示します。 下記例では、socket()がエラーを返すように第一引数に不正な値を入れています。
#include <stdio.h>
#include <winsock2.h>
int
main()
{
WSADATA wsaData;
SOCKET sock;
WSAStartup(MAKEWORD(2,0), &wsaData);
sock = socket(AF_UNSPEC, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET) {
printf("error : %d\n", WSAGetLastError());
return 1;
}
WSACleanup();
return 0;
}
上記サンプルコードの実行例を以下に示します。
C:\> a.exe error : 10022 |
上記実行例では、単にエラー番号だけ出ていて何がいけなかったのかがわからないので、その数値が持っている意味を調べなければなりません。 Visual Studio付属のVC++エラールックアップツールを使うと簡単にエラー値からエラー内容がわかります。 環境やVisual Studioのバージョンによって異なりますが、例えば私の環境では「スタート > 全てのプログラム > Visual Studio .NET > Visual Studio .NET ツール > Visual C++エラールックアップ」でエラー検索ツールを実行できます。
エラー検索ツールを実行して「10022」を入力して「検索」ボタンを押すと「無効な引数が提供されました。」というエラーメッセージが表示されます。 サンプルプログラムでsocket()が失敗するのは、第一引数が不正であるためなので、エラーが正しい事がわかります。 このエラー検索ツールを使うとヘッダファイルを探していくよりは100倍楽なので、デバッグなどに活用していただければ幸いです。