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;
公開メンバー¶
-
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バインディングの作成者に役立ちます。
-
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で追加。