uv_req_t — 基底リクエスト

uv_req_tは、libuvのすべてのリクエスト型の基底型です。

構造体は、libuvのどのリクエストも、uv_req_tにキャストできるように配置されています。ここで定義するすべてのAPI関数は、どのリクエスト型でも使えます。

データ型

type uv_req_t

libuvの基底リクエスト構造体です。

type uv_any_req

すべてのリクエスト型の共用体です。

enum uv_req_type

libuvリクエストの種類です。

typedef enum {
    UV_UNKNOWN_REQ = 0,
    UV_REQ,
    UV_CONNECT,
    UV_WRITE,
    UV_SHUTDOWN,
    UV_UDP_SEND,
    UV_FS,
    UV_WORK,
    UV_GETADDRINFO,
    UV_GETNAMEINFO,
    UV_REQ_TYPE_MAX,
} uv_req_type;

公開メンバー

void *uv_req_t.data

ユーザーが定義する任意のデータのための領域です。libuvはこのフィールドを使いません。

uv_req_type uv_req_t.type

リクエストの型を示す、uv_req_typeです。読み取り専用です。

API

UV_REQ_TYPE_MAP(iter_macro)

各リクエスト型について、iter_macroを呼び出す列に展開されるマクロです。iter_macroは、2つの引数で呼び出されます。1つ目は、uv_req_typeの要素名から、UV_の接頭辞を除いた名前です。2つ目は、対応する構造体の型名から、uv_の接頭辞と、_tの接尾辞を除いた名前です。

int uv_cancel(uv_req_t *req)

保留中のリクエストをキャンセルします。実行中または実行を終えたリクエストでは失敗します。書き込みリクエストは例外です。進行中の書き込みのキャンセルでは、中断を試みます。コールバックが部分書き込みを報告することがあります。すでに完了した書き込みのキャンセルは、何もせず成功します。

成功時は0、失敗時は0未満のエラーコードを返します。

現在、キャンセルをサポートするリクエストは、uv_write_t、uv_fs_t、uv_getaddrinfo_t、uv_getnameinfo_t、uv_random_tと、uv_work_tだけです。

キャンセルしたリクエストのコールバックは、後で呼び出されます。コールバックが呼び出されるまでは、リクエストに関連するメモリーを解放しては、いけません。

キャンセルは、次のようにコールバックへ通知されます。

  • リクエストが、uv_fs_tの場合は、req->resultフィールドが、UV_ECANCELEDに設定されます。

  • リクエストが、uv_work_t、uv_getaddrinfo_t、uv_getnameinfo_tまたは、uv_random_tの場合は、status == UV_ECANCELEDとしてコールバックが呼び出されます。

  • リクエストが、uv_write_tの場合は、status == UV_ECANCELEDとしてコールバックが呼び出されます。コールバック内で、uv_write_nwritten()を使い、キャンセル前に書き込まれたバイト数を確認してください。完全にキャンセルされた書き込み、つまり1バイトも書き込まなかった書き込みでは、同じストリームの他の書き込みとは順序が異なる形でコールバックが呼ばれることがあります。キャンセルが効く前にカーネルが書き込みの処理を終えた場合、キャンセルした書き込みでも、成功したり、別のエラーで失敗したりすることがある点に注意してください。

size_t uv_req_size(uv_req_type type)

指定したリクエスト型のサイズを返します。構造体の配置を知りたくないFFIバインディングの作成者に役立ちます。

void *uv_req_get_data(const uv_req_t *req)

戻り値は、req->dataです。

バージョン1.19.0で追加。

void uv_req_set_data(uv_req_t *req, void *data)

次のフィールド、req->dataを、dataに設定します。

バージョン1.19.0で追加。

uv_req_type uv_req_get_type(const uv_req_t *req)

戻り値は、req->typeです。

バージョン1.19.0で追加。

const char *uv_req_type_name(uv_req_type type)

指定したリクエスト型に対応する構造体の名前を返します。たとえば、「connect」という、uv_connect_tに対応する名前が、UV_CONNECTに対して返されます。

該当するリクエスト型がなければ、NULLを返します。

バージョン1.19.0で追加。