ほとんどのWinsock 2 関数は、関数から返る時点で戻り値として特定のエラー原因を返しません。
WSAGetLastError関数は、呼び出しスレッドにおいて発生した最後のエラーを返します。特定のWinsock関数がエラーの発生を示した場合、直ちにこの関数を呼び出して、エラーとなった関数呼び出しに関しての拡張エラーコードを取得するべきです。これらのエラーコードと、エラーコードに関連する短い説明のテキストが Winerror.h ヘッダファイルで定義されています。FormatMessage関数を使用して、エラーコードに対するメッセージ文字列を取得することができます。
以下の表では、WSAGetLastErrorによって返される可能性のあるエラーコードを記述しています。。
指定されたイベントオブジェクトハンドルが無効です。
アプリケーションがイベントオブジェクトを使用しようとしましたが、指定されたハンドルが有効ではありません。このエラーはオペレーティングシステムによって返されているため、将来のWindowsのリリースによってエラー番号が変更される可能性があることに注意してください。
メモリが不足しています。
アプリケーションがWindows関数に直接マップする関数を使用しましたが、Windows関数は必要なメモリリソースが不足していることを示しています。このエラーはオペレーティングシステムによって返されているため、将来のWindowsのリリースによってエラー番号が変更される可能性があることに注意してください。
1つ以上のパラメータが無効です。
アプリケーションがWindows関数に直接マップする関数を使用しましたが、Windows関数は1つ以上のパラメータが不正あることを示しています。このエラーはオペレーティングシステムによって返されているため、将来のWindowsのリリースによってエラー番号が変更される可能性があることに注意してください。
オーバーラップ操作が中断されました。
ソケットがクローズされたためにオーバーラップ操作がキャンセルされたか、WSAIoctl関数でSIO_FLUSHコマンドが実行されました。このエラーはオペレーティングシステムによって返されているため、将来のWindowsのリリースによってエラー番号が変更される可能性があることに注意してください。
オーバーラップI/Oイベントオブジェクトがシグナル状態ではありません。
アプリケーションは未完了のオーバーラップ操作のステータスを決定しようとしました。オーバーラップ操作がいつ完了したかを決定するために、アプリケーションがWSAGetOverlappedResult関数を(fWaitフラグをFALSEにセットして)ポーリングモードで呼び出す場合、操作が完了するまでの間はこのエラーコードが返されます。このエラーはオペレーティングシステムによって返されているため、将来のWindowsのリリースによってエラー番号が変更される可能性があることに注意してください。
オーバーラップ操作は後で完了します。
アプリケーションが直ちに完了できないオーバーラップ操作を開始しており、その操作はまだ完了していません。そのオーバーラップ操作が完了した後で、完了の表示が出されます。このエラーはオペレーティングシステムによって返されているため、将来のWindowsのリリースによってエラー番号が変更される可能性があることに注意してください。
関数呼び出しが中断されました。
WSACancelBlockingCall関数の呼び出しにより、ブロッキング操作が中断されました。
指定されたファイルハンドルが有効ではありません。
アクセスが拒否されました。
アクセス許可で禁止されているソケットへのアクセスをしようとしました。1つの例は、setsockopt(SO_BROADCAST)を使用してブロードキャスト許可をセットすることなく、sendto関数に対してブロードキャストアドレスを使用することです。
WSAEACCESエラーに対して考えられる別の理由として、(Windows NT 4.0 SP4以降で)bind関数が呼び出されたときに、別のアプリケーション、サービス、カーネルモードドライバがすでに同じアドレスを排他アクセスでバインドしていることがあります。このような排他アクセスはWindows NT 4.0 SP4以降の新しい機能で、SO_EXCLUSIVEADDRUSEオプションを使用することで実装されます。
不正なアドレスです。
システムは呼び出しのポインタ引数を使用する際に無効なポインタアドレスを検出しました。このエラーは、アプリケーションが無効なポインタ値を渡した場合や、バッファの長さが小さすぎる場合に発生します。
無効な引数です。
無効な引数が渡されました(例えば、setsockopt関数に無効なレベルを指定するなど)。場合によっては、このエラーは現在のソケットの状態について言及しています(例えば、リスン状態ではないソケットに対してacceptを呼び出す場合)。
オープンファイル数が多すぎます。
オープンされているソケットの数が多すぎます。それぞれの実装は、システム全体、プロセスごと、スレッドごとのいずれかに対して、利用可能なソケットハンドルの最大数が存在する可能性があります
リソースは一時的に利用できません。
このエラーは直ちに完了することのできない非ブロッキングソケットに関する操作から返されます。例えばrecv関数