エラー処理

libuvでは、エラーは負の値を持つ定数で表されます。目安として、状態を表す引数がある場合や、API関数が整数を返す場合、負の値はエラーを意味します。

コールバックを受け取る関数がエラーを返した場合、そのコールバックが呼び出されることはありません。

注記

実装の詳細: Unixでは、エラーコードは符号を反転したerrno(つまり-errno)です。一方、Windowsではlibuvが任意の負の値として定義しています。

エラー定数

UV_E2BIG

引数リストが長すぎる

UV_EACCES

アクセスが拒否された

UV_EADDRINUSE

アドレスが既に使われている

UV_EADDRNOTAVAIL

アドレスを利用できない

UV_EAFNOSUPPORT

アドレスファミリーがサポートされていない

UV_EAGAIN

リソースを一時的に利用できない

UV_EAI_ADDRFAMILY

アドレスファミリーがサポートされていない

UV_EAI_AGAIN

一時的な失敗

UV_EAI_BADFLAGS

ai_flagsの値が不正

UV_EAI_BADHINTS

hintsの値が不正

UV_EAI_CANCELED

リクエストがキャンセルされた

UV_EAI_FAIL

恒久的な失敗

UV_EAI_FAMILY

ai_familyがサポートされていない

UV_EAI_MEMORY

メモリ不足

UV_EAI_NODATA

アドレスがない

UV_EAI_NONAME

不明なノードまたはサービス

UV_EAI_OVERFLOW

引数バッファのオーバーフロー

UV_EAI_PROTOCOL

解決されたプロトコルが不明

UV_EAI_SERVICE

このソケットの種類ではサービスを利用できない

UV_EAI_SOCKTYPE

ソケットの種類がサポートされていない

UV_EALREADY

接続処理が既に進行中

UV_EBADF

ファイル記述子が不正

UV_EBUSY

リソースが使用中またはロックされている

UV_ECANCELED

操作がキャンセルされた

UV_ECHARSET

不正なUnicode文字

UV_ECONNABORTED

ソフトウェアが接続を中断させた

UV_ECONNREFUSED

接続が拒否された

UV_ECONNRESET

接続が相手側によってリセットされた

UV_EDESTADDRREQ

宛先アドレスが必要

UV_EEXIST

ファイルが既に存在する

UV_EFAULT

システムコールの引数のアドレスが不正

UV_EFBIG

ファイルが大きすぎる

UV_EHOSTUNREACH

ホストに到達できない

UV_EINTR

システムコールが中断された

UV_EINVAL

引数が不正

UV_EIO

入出力エラー

UV_EISCONN

ソケットは既に接続されている

UV_EISDIR

ディレクトリに対する不正な操作

UV_ELOOP

シンボリックリンクが多すぎる

UV_EMFILE

開いているファイルが多すぎる

UV_EMSGSIZE

メッセージが長すぎる

UV_ENAMETOOLONG

名前が長すぎる

UV_ENETDOWN

ネットワークが停止している

UV_ENETUNREACH

ネットワークに到達できない

UV_ENFILE

ファイルテーブルのオーバーフロー

UV_ENOBUFS

利用できるバッファ領域がない

UV_ENODEV

該当するデバイスがない

UV_ENOENT

該当するファイルまたはディレクトリがない

UV_ENOMEM

メモリが不足している

UV_ENONET

マシンがネットワーク上にない

UV_ENOPROTOOPT

プロトコルを利用できない

UV_ENOSPC

デバイスに空き領域がない

UV_ENOSYS

関数が実装されていない

UV_ENOTCONN

ソケットが接続されていない

UV_ENOTDIR

ディレクトリではない

UV_ENOTEMPTY

ディレクトリが空ではない

UV_ENOTSOCK

ソケットではないものに対するソケット操作

UV_ENOTSUP

ソケットでサポートされていない操作

UV_EOVERFLOW

定義されたデータ型に対して値が大きすぎる

UV_EPERM

操作が許可されていない

UV_EPIPE

パイプが切断されている

UV_EPROTO

プロトコルエラー

UV_EPROTONOSUPPORT

プロトコルがサポートされていない

UV_EPROTOTYPE

ソケットに適合しない種類のプロトコル

UV_ERANGE

結果が大きすぎる

UV_EROFS

読み取り専用のファイルシステム

UV_ESHUTDOWN

通信端点のシャットダウン後は送信できない

UV_ESPIPE

シークが不正

UV_ESRCH

該当するプロセスがない

UV_ETIMEDOUT

接続がタイムアウトした

UV_ETXTBSY

テキストファイルが使用中

UV_EXDEV

デバイスをまたぐリンクは許可されていない

UV_UNKNOWN

不明なエラー

UV_EOF

ファイルの終端

UV_ENXIO

該当するデバイスまたはアドレスがない

リンクが多すぎる

UV_ENOTTY

デバイスに適合しないioctl

UV_EFTYPE

適合しないファイルの種類または形式

UV_EILSEQ

不正なバイト列

UV_ESOCKTNOSUPPORT

ソケットの種類がサポートされていない

UV_EUNATCH

プロトコルドライバーが接続されていない

API

UV_ERRNO_MAP(iter_macro)

上記の各エラー定数に対するiter_macroの一連の呼び出しに展開されるマクロです。iter_macroは2つの引数で呼び出されます。1つ目はUV_接頭辞を除いたエラー定数の名前、2つ目はエラーメッセージの文字列リテラルです。

const char *uv_strerror(int err)

指定されたエラーコードのエラーメッセージを返します。不明なエラーコードで呼び出すと、数バイトのメモリがリークします。

char *uv_strerror_r(int err, char *buf, size_t buflen)

指定されたエラーコードのエラーメッセージを返します。NUL終端のメッセージは、利用者が渡すバッファbufに格納されます。バッファのサイズは最大buflenバイトです。

バージョン1.22.0で追加。

const char *uv_err_name(int err)

指定されたエラーコードのエラー名を返します。不明なエラーコードで呼び出すと、数バイトのメモリがリークします。

char *uv_err_name_r(int err, char *buf, size_t buflen)

指定されたエラーコードのエラー名を返します。NUL終端の名前は、利用者が渡すバッファbufに格納されます。バッファのサイズは最大buflenバイトです。

バージョン1.22.0で追加。

int uv_translate_sys_error(int sys_errno)

指定されたプラットフォーム依存のエラーコードに対応するlibuvのエラーコードを返します。UnixではPOSIXエラーコード(errnoに格納されるもの)、WindowsではWin32エラーコード(GetLastError()またはWSAGetLastError()が返すもの)が対象です。

sys_errnoが既にlibuvのエラーであれば、その値をそのまま返します。

バージョン1.10.0で変更: 関数が公開APIとして宣言されました。