uv_tcp_t — TCPハンドル¶
TCPハンドルは、TCPストリームとTCPサーバーの両方を表します。
uv_tcp_tは、次の型の「サブクラス」です: uv_stream_t。
データ型¶
-
type uv_tcp_t¶
TCPハンドルの型です。
-
enum uv_tcp_flags¶
次の関数で使うフラグです:
uv_tcp_bind()。enum uv_tcp_flags { /* Used with uv_tcp_bind, when an IPv6 address is used. */ UV_TCP_IPV6ONLY = 1, /* Enable SO_REUSEPORT socket option when binding the handle. * This allows completely duplicate bindings by multiple processes * or threads if they all set SO_REUSEPORT before binding the port. * Incoming connections are distributed across the participating * listener sockets. * * This flag is available only on Linux 3.9+, DragonFlyBSD 3.6+, * FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+ for now. */ UV_TCP_REUSEPORT = 2, };
公開メンバー¶
該当なし
関連項目
次の型のuv_stream_tメンバーも適用されます。
API¶
-
int uv_tcp_init_ex(uv_loop_t *loop, uv_tcp_t *handle, unsigned int flags)¶
指定したフラグでハンドルを初期化します。現在、flagsパラメーターの下位8ビットだけをソケットのドメインとして使い、指定したドメインのソケットを作成します。指定したドメインが
AF_UNSPECの場合は、次の関数と同様にソケットを作成しません:uv_tcp_init()。バージョン1.7.0で追加。
-
int uv_tcp_open(uv_tcp_t *handle, uv_os_sock_t sock)¶
既存のファイル記述子またはSOCKETをTCPハンドルとして開きます。
バージョン1.2.1での変更: ファイル記述子を非ブロッキングモードに設定します。
注記
渡したファイル記述子やSOCKETの型は検査しませんが、有効なストリームソケットを表している必要があります。
-
int uv_tcp_nodelay(uv_tcp_t *handle, int enable)¶
次のオプションを有効にします: TCP_NODELAY。これによりNagleアルゴリズムを無効にします。
-
int uv_tcp_keepalive(uv_tcp_t *handle, int enable, unsigned int delay)¶
TCPキープアライブを有効または無効にします。delayは最初の待ち時間を秒単位で表し、enableが0の場合は無視します。
待ち時間delayに達した後、1秒間隔で10回のプローブを送信します。この手順の最後でも接続が失われたままの場合は、ハンドルを破棄し、対応するコールバックへ
UV_ETIMEDOUTエラーを渡します。次の値、delayが1未満の場合は、
UV_EINVALを返します。バージョン1.49.0での変更: 次の値、delayが1未満の場合は、
UV_EINVAL`を返します。
-
int uv_tcp_keepalive_ex(uv_tcp_t *handle, int on, unsigned int idle, unsigned int intvl, unsigned int cnt)¶
次のソケットオプションをすべて指定して、TCPキープアライブを有効または無効にします: TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT。idleはTCP_KEEPIDLEの値、intvlはTCP_KEEPINTVLの値、cntはTCP_KEEPCNTの値です。onが0の場合は無視します。
TCPキープアライブが有効な場合、idleは、TCPがキープアライブのプローブを送信し始める前に、接続がアイドル状態である必要がある時間を秒単位で表します。intvlは、各プローブの間隔を秒単位で表します。TCPは、cnt回のプローブを送っても相手から応答がない場合、接続を切断します。その後、ハンドルを破棄し、対応するコールバックへ
UV_ETIMEDOUTエラーを渡します。次の値、idle、intvl、cntのいずれかが1未満の場合は、
UV_EINVALを返します。バージョン1.52.0での変更: 次のソケットオプションの設定をサポートしました: TCP_KEEPINTVL、TCP_KEEPCNT。
注記
基盤となるOSがソケットオプションをサポートしていることを確認してください。現在サポートしているプラットフォームは次のとおりです。
AIX
DragonFlyBSD
FreeBSD
illumos
Linux
macOS
NetBSD
Solaris
Windows
-
int uv_tcp_simultaneous_accepts(uv_tcp_t *handle, int enable)¶
新しいTCP接続を待ち受けるときに、OSがキューに入れる複数の非同期acceptリクエストを同時に扱う機能を有効または無効にします。
この設定は、TCPサーバーの性能を調整するために使います。同時acceptは接続の受け付け速度を大幅に高められるため、既定で有効です。ただし、複数プロセスの構成では、負荷の分配が偏る可能性があります。
-
int uv_tcp_bind(uv_tcp_t *handle, const struct sockaddr *addr, unsigned int flags)¶
ハンドルをアドレスとポートにバインドします。
ポートがすでに使われている場合は、次のエラー、
UV_EADDRINUSEが、次の関数、uv_listen()またはuv_tcp_connect()から返る可能性があります。ただし、バインドするすべてのソケットで、UV_TCP_REUSEPORTをflagsに指定した場合は例外です。つまり、この関数が成功しても、次の関数、uv_listen()またはuv_tcp_connect()の成功は保証されません。- パラメーター:
handle — TCPハンドル。次の関数で初期化しておく必要があります:
uv_tcp_init()。addr — バインドするアドレス。初期化済みの
struct sockaddr_inまたはstruct sockaddr_in6を指す必要があります。flags — ソケットをバインドするときの動作を制御するフラグです。
UV_TCP_IPV6ONLYをflagsに含めると、デュアルスタックのサポートを無効にし、IPv6だけを使います。UV_TCP_REUSEPORTをflagsに含めると、ソケットオプションSO_REUSEPORTを有効にし、複数のプロセスやスレッドのすべての待ち受けソケットへ、受信する接続を分配する負荷分散機能を使えます。
- 戻り値:
成功時は0、失敗時は0未満のエラーコードを返します。
バージョン1.49.0での変更: 次のフラグを追加しました:
UV_TCP_REUSEPORT。注記
UV_TCP_REUSEPORTフラグは、現在Linux 3.9以降、DragonFlyBSD 3.6以降、FreeBSD 12.0以降、Solaris 11.4、AIX 7.2.5以降でだけ利用できます。他のプラットフォームでは、この関数はUV_ENOTSUPエラーを返します。
-
int uv_tcp_getsockname(const uv_tcp_t *handle, struct sockaddr *name, int *namelen)¶
ハンドルが現在バインドされているアドレスを取得します。nameは、有効で十分な大きさのメモリー領域を指す必要があります。IPv4とIPv6をサポートするため、
struct sockaddr_storageを推奨します。
-
int uv_tcp_getpeername(const uv_tcp_t *handle, struct sockaddr *name, int *namelen)¶
ハンドルへ接続している相手のアドレスを取得します。nameは、有効で十分な大きさのメモリー領域を指す必要があります。IPv4とIPv6をサポートするため、
struct sockaddr_storageを推奨します。
-
int uv_tcp_connect(uv_connect_t *req, uv_tcp_t *handle, const struct sockaddr *addr, uv_connect_cb cb)¶
IPv4またはIPv6のTCP接続を確立します。初期化済みのTCPハンドルと、未初期化の
uv_connect_tを渡してください。addrは、初期化済みのstruct sockaddr_inまたはstruct sockaddr_in6を指す必要があります。Windowsでは、addrが未指定アドレス(
0.0.0.0または::)を指すように初期化されている場合、localhostを指すように変更します。これはLinuxの動作に合わせるためです。接続が確立したとき、または接続エラーが発生したときに、コールバックを呼び出します。
バージョン1.19.0での変更: 次のアドレス、
0.0.0.0と::をlocalhostへ対応付ける処理を追加しました。
関連項目
次の型のuv_stream_tAPI関数も適用されます。
-
int uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb)¶
RSTパケットを送信してTCP接続をリセットします。この処理では、ソケットオプションSO_LINGERのlinger間隔を0に設定してから、次の関数を呼び出します:
uv_close()。プラットフォーム間の不一致があるため、uv_shutdown()とuv_tcp_close_reset()の呼び出しを混在させることはできません。バージョン1.32.0で追加。
-
int uv_socketpair(int type, int protocol, uv_os_sock_t socket_vector[2], int flags0, int flags1)¶
指定した特性を持つ、接続済みソケットのペアを作成します。得られたハンドルは、uv_tcp_openへ渡したり、uv_spawnで使ったり、他の目的に使ったりできます。
次の値、flags0とflags1に指定できる値は、次のとおりです。
UV_NONBLOCK_PIPE: 指定したソケットハンドルを、OVERLAPPEDまたはFIONBIO/O_NONBLOCKのI/O用に開きます。libuvで使うハンドルでは推奨しますが、通常、他の用途では推奨しません。
ドメインがAF_UNIXのsocketpair(2)と同等です。
バージョン1.41.0で追加。