エラー内容の取得

ここでは、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倍楽なので、デバッグなどに活用していただければ幸いです。

プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!