Skip to content

Net

[Stable: 2 - 安定]

Stable: 2 安定性: 2 - 安定

ソースコード: lib/net.js

node:net モジュールは、ストリームベースの TCP または IPC サーバー (net.createServer()) およびクライアント (net.createConnection()) を作成するための非同期ネットワーク API を提供します。

以下を使用してアクセスできます:

js
import net from 'node:net';
js
const net = require('node:net');

IPC サポート

[履歴]

バージョン変更点
v20.8.0\0abstract のような抽象 Unix ドメインソケットパスへのバインドをサポートします。 Node.js \< v20.4.0 では '\0' をバインドできます。

node:net モジュールは、Windows の名前付きパイプ、および他のオペレーティングシステムの Unix ドメインソケットによる IPC をサポートします。

IPC 接続のパスの識別

net.connect()net.createConnection()server.listen()、および socket.connect() は、IPC エンドポイントを識別するために path パラメータを取ります。

Unix では、ローカルドメインは Unix ドメインとしても知られています。 path はファイルシステムのパス名です。 パス名の長さが sizeof(sockaddr_un.sun_path) の長さを超えると、エラーがスローされます。 一般的な値は、Linux では 107 バイト、macOS では 103 バイトです。 Node.js API の抽象化が Unix ドメインソケットを作成する場合、Unix ドメインソケットのリンクも解除します。 たとえば、net.createServer() は Unix ドメインソケットを作成し、server.close() はそれをリンク解除します。 しかし、ユーザーがこれらの抽象化の外で Unix ドメインソケットを作成する場合、ユーザーはそれを削除する必要があります。 同じことが、Node.js API が Unix ドメインソケットを作成したが、プログラムがクラッシュした場合にも当てはまります。 つまり、Unix ドメインソケットはファイルシステムに表示され、リンクが解除されるまで永続化されます。 Linux では、パスの先頭に \0 を追加して、Unix 抽象ソケットを使用できます (例: \0abstract)。 Unix 抽象ソケットへのパスはファイルシステムに表示されず、ソケットへの開いている参照がすべて閉じられると自動的に消えます。

Windows では、ローカルドメインは名前付きパイプを使用して実装されます。 path は \\?\pipe\ または \\.\pipe\ のエントリを参照 する必要があります。 任意の文字が許可されますが、後者は .. シーケンスの解決など、パイプ名の処理を行う場合があります。 見た目とは異なり、パイプ名前空間はフラットです。 パイプは 永続化されません。 パイプへの最後の参照が閉じられると削除されます。 Unix ドメインソケットとは異なり、Windows は所有プロセスが終了するとパイプを閉じて削除します。

JavaScript の文字列エスケープでは、次のように、追加のバックスラッシュエスケープでパスを指定する必要があります:

js
net.createServer().listen(
  path.join('\\\\?\\pipe', process.cwd(), 'myctl'));

クラス: net.BlockList

追加: v15.0.0, v14.18.0

BlockList オブジェクトは、特定の IP アドレス、IP 範囲、または IP サブネットへのインバウンドまたはアウトバウンドアクセスを無効にするためのルールを指定するために、いくつかのネットワーク API で使用できます。

blockList.addAddress(address[, type])

追加: v15.0.0, v14.18.0

指定された IP アドレスをブロックするルールを追加します。

blockList.addRange(start, end[, type])

追加: v15.0.0, v14.18.0

start(包括的)から end(包括的)までの IP アドレス範囲をブロックするルールを追加します。

blockList.addSubnet(net, prefix[, type])

追加: v15.0.0, v14.18.0

  • net <string> | <net.SocketAddress> ネットワーク IPv4 または IPv6 アドレス。
  • prefix <number> CIDR プレフィックスビット数。 IPv4 の場合、これは 0 から 32 までの値でなければなりません。 IPv6 の場合、これは 0 から 128 の間でなければなりません。
  • type <string> 'ipv4' または 'ipv6' のいずれか。 デフォルト: 'ipv4'

サブネットマスクとして指定された IP アドレス範囲をブロックするルールを追加します。

blockList.check(address[, type])

Added in: v15.0.0, v14.18.0

与えられたIPアドレスが BlockList に追加されたルールのいずれかに一致する場合、true を返します。

js
const blockList = new net.BlockList();
blockList.addAddress('123.123.123.123');
blockList.addRange('10.0.0.1', '10.0.0.10');
blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6');

console.log(blockList.check('123.123.123.123'));  // Prints: true
console.log(blockList.check('10.0.0.3'));  // Prints: true
console.log(blockList.check('222.111.111.222'));  // Prints: false

// IPv4アドレスのIPv6表記は動作します:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true

blockList.rules

Added in: v15.0.0, v14.18.0

ブロックリストに追加されたルールのリスト。

BlockList.isBlockList(value)

Added in: v23.4.0

  • value <any> 任意の JS 値
  • valuenet.BlockList であれば、true を返します。

Class: net.SocketAddress

Added in: v15.14.0, v14.18.0

new net.SocketAddress([options])

Added in: v15.14.0, v14.18.0

  • options <Object>
    • address <string> IPv4またはIPv6文字列としてのネットワークアドレス。 デフォルト: family'ipv4'の場合は'127.0.0.1'family'ipv6'の場合は'::'
    • family <string> 'ipv4'または'ipv6'のいずれか。 デフォルト: 'ipv4'
    • flowlabel <number> family'ipv6'の場合にのみ使用されるIPv6フローラベル。
    • port <number> IPポート。

socketaddress.address

追加: v15.14.0, v14.18.0

socketaddress.family

追加: v15.14.0, v14.18.0

  • 型: <string> 'ipv4' または 'ipv6' のいずれか。

socketaddress.flowlabel

追加: v15.14.0, v14.18.0

socketaddress.port

追加: v15.14.0, v14.18.0

SocketAddress.parse(input)

追加: v23.4.0

  • input <string> IPアドレスとオプションのポートを含む入力文字列。例: 123.1.2.3:1234 または [1::1]:1234
  • 戻り値: <net.SocketAddress> パースが成功した場合は SocketAddress を返します。 それ以外の場合は undefined を返します。

Class: net.Server

追加: v0.1.90

このクラスは、TCPまたはIPCサーバーを作成するために使用されます。

new net.Server([options][, connectionListener])

net.Serverは、次のイベントを持つEventEmitterです。

Event: 'close'

追加: v0.5.0

サーバーが閉じるときに発生します。 接続が存在する場合、このイベントはすべての接続が終了するまで発生しません。

イベント: 'connection'

追加: v0.1.90

新しいコネクションが確立されたときに発生します。socketnet.Socket のインスタンスです。

イベント: 'error'

追加: v0.1.90

エラーが発生したときに発生します。net.Socket とは異なり、'close' イベントは、server.close() が手動で呼び出されない限り、このイベントの直後には発生しませんserver.listen() の説明の例を参照してください。

イベント: 'listening'

追加: v0.1.90

server.listen() の呼び出し後、サーバーがバインドされたときに発生します。

イベント: 'drop'

追加: v18.6.0, v16.17.0

接続数が server.maxConnections の閾値に達すると、サーバーは新しい接続をドロップし、代わりに 'drop' イベントを発行します。 TCP サーバーの場合、引数は次のようになります。それ以外の場合、引数は undefined です。

  • data <Object> イベントリスナーに渡される引数。
    • localAddress <string> ローカルアドレス。
    • localPort <number> ローカルポート。
    • localFamily <string> ローカルファミリー。
    • remoteAddress <string> リモートアドレス。
    • remotePort <number> リモートポート。
    • remoteFamily <string> リモート IP ファミリー。 'IPv4' または 'IPv6'

server.address()

[履歴]

バージョン変更点
v18.4.0family プロパティが、数値の代わりに文字列を返すようになりました。
v18.0.0family プロパティが、文字列の代わりに数値を返すようになりました。
v0.1.90追加: v0.1.90

IPソケットでリッスンしている場合、オペレーティングシステムによって報告された、バインドされた address、アドレスの family 名、およびサーバーの port を返します(OS割り当てのアドレスを取得するときに割り当てられたポートを見つけるのに役立ちます)。{ port: 12346, family: 'IPv4', address: '127.0.0.1' }

パイプまたはUnixドメインソケットでリッスンしているサーバーの場合、名前は文字列として返されます。

js
const server = net.createServer((socket) => {
  socket.end('goodbye\n');
}).on('error', (err) => {
  // エラーをここで処理します。
  throw err;
});

// 任意の未使用ポートを取得します。
server.listen(() => {
  console.log('opened server on', server.address());
});

server.address() は、'listening' イベントが発行される前、または server.close() を呼び出した後には null を返します。

server.close([callback])

追加: v0.1.90

サーバーが新しい接続を受け入れるのを停止し、既存の接続を維持します。 この関数は非同期であり、すべての接続が終了し、サーバーが 'close' イベントを発行すると、サーバーは最終的に閉じられます。 オプションの callback は、'close' イベントが発生すると呼び出されます。 そのイベントとは異なり、サーバーが閉じられたときに開いていなかった場合、Error が唯一の引数として呼び出されます。

server[Symbol.asyncDispose]()

Added in: v20.5.0, v18.18.0

[Stable: 1 - Experimental]

Stable: 1 安定性: 1 - 試験的

server.close() を呼び出し、サーバーが閉じたときに履行される Promise を返します。

server.getConnections(callback)

Added in: v0.9.7

サーバー上の同時接続の数を非同期で取得します。ソケットがフォークに送信された場合に機能します。

Callback は、2 つの引数 errcount を取ります。

server.listen()

接続をリッスンするサーバーを開始します。net.Server は、リッスンするものに応じて TCP または IPC サーバーになる可能性があります。

可能なシグネチャ:

この関数は非同期です。サーバーがリスニングを開始すると、'listening' イベントが発行されます。最後のパラメータ callback は、'listening' イベントのリスナーとして追加されます。

すべての listen() メソッドは、保留中の接続キューの最大長を指定するために backlog パラメータを取ることができます。実際の長さは、Linux 上の tcp_max_syn_backlogsomaxconn などの sysctl 設定を通じて OS によって決定されます。このパラメータのデフォルト値は 511 (512 ではない) です。

すべての net.SocketSO_REUSEADDR に設定されます (詳細については socket(7) を参照してください)。

最初の server.listen() 呼び出し中にエラーが発生した場合、または server.close() が呼び出された場合にのみ、server.listen() メソッドを再度呼び出すことができます。それ以外の場合は、ERR_SERVER_ALREADY_LISTEN エラーがスローされます。

リスニング時に発生する最も一般的なエラーの 1 つは EADDRINUSE です。これは、別のサーバーが要求された port / path / handle で既にリスニングしている場合に発生します。これを処理する 1 つの方法は、一定時間後に再試行することです。

js
server.on('error', (e) => {
  if (e.code === 'EADDRINUSE') {
    console.error('Address in use, retrying...');
    setTimeout(() => {
      server.close();
      server.listen(PORT, HOST);
    }, 1000);
  }
});

server.listen(handle[, backlog][, callback])

Added in: v0.5.10

ポート、Unixドメインソケット、またはWindows名前付きパイプにすでにバインドされている指定されたhandleで、接続をリッスンするサーバーを起動します。

handleオブジェクトは、サーバー、ソケット(基になる_handleメンバーを持つもの)、または有効なファイル記述子であるfdメンバーを持つオブジェクトのいずれかになります。

ファイル記述子でのリスンは、Windowsではサポートされていません。

server.listen(options[, callback])

[履歴]

バージョン変更点
v23.1.0reusePort オプションがサポートされました。
v15.6.0AbortSignal のサポートが追加されました。
v11.4.0ipv6Only オプションがサポートされました。
v0.11.14Added in: v0.11.14
  • options <Object> 必須。次のプロパティをサポートします。

    • backlog <number> server.listen() 関数の共通パラメータ。
    • exclusive <boolean> デフォルト: false
    • host <string>
    • ipv6Only <boolean> TCPサーバーの場合、ipv6Onlytrueに設定すると、デュアルスタックのサポートが無効になります。つまり、ホスト::にバインドしても0.0.0.0はバインドされません。 デフォルト: false
    • reusePort <boolean> TCPサーバーの場合、reusePorttrueに設定すると、同じホスト上の複数のソケットが同じポートにバインドできるようになります。着信接続は、オペレーティングシステムによってリスンしているソケットに分散されます。このオプションは、Linux 3.9+、DragonFlyBSD 3.6+、FreeBSD 12.0+、Solaris 11.4、AIX 7.2.5+など、一部のプラットフォームでのみ使用できます。 デフォルト: false
    • path <string> portが指定されている場合は無視されます。IPC接続のパスの識別を参照してください。
    • port <number>
    • readableAll <boolean> IPCサーバーの場合、パイプをすべてのユーザーが読み取り可能にします。 デフォルト: false
    • signal <AbortSignal> リッスンしているサーバーを閉じるために使用できるAbortSignal。
    • writableAll <boolean> IPCサーバーの場合、パイプをすべてのユーザーが書き込み可能にします。 デフォルト: false
  • callback <Function> functions.

  • 戻り値: <net.Server>

portが指定されている場合、server.listen([port[, host[, backlog]]][, callback])と同じように動作します。それ以外の場合、pathが指定されている場合は、server.listen(path[, backlog][, callback])と同じように動作します。どちらも指定されていない場合は、エラーがスローされます。

exclusivefalse(デフォルト)の場合、クラスタワーカーは同じ基になるハンドルを使用し、接続処理の責務を共有できます。exclusivetrueの場合、ハンドルは共有されず、ポートの共有を試みるとエラーが発生します。排他的ポートでリスンする例を以下に示します。

js
server.listen({
  host: 'localhost',
  port: 80,
  exclusive: true,
});

exclusivetrueで、基になるハンドルが共有されている場合、複数のワーカーが異なるバックログを持つハンドルをクエリする可能性があります。この場合、マスタープロセスに渡される最初のbacklogが使用されます。

IPCサーバーをルートとして起動すると、特権のないユーザーがサーバーパスにアクセスできなくなる可能性があります。readableAllwritableAllを使用すると、すべてのユーザーがサーバーにアクセスできるようになります。

signalオプションが有効になっている場合、対応するAbortController.abort()を呼び出すことは、サーバーで.close()を呼び出すのと似ています。

js
const controller = new AbortController();
server.listen({
  host: 'localhost',
  port: 80,
  signal: controller.signal,
});
// 後で、サーバーを閉じたい場合。
controller.abort();

server.listen(path[, backlog][, callback])

Added in: v0.1.90

指定された path で接続をリッスンする IPC サーバーを起動します。

server.listen([port[, host[, backlog]]][, callback])

Added in: v0.1.90

指定された porthost で接続をリッスンする TCP サーバーを起動します。

port が省略されたり、0 の場合、オペレーティングシステムは任意の未使用ポートを割り当てます。これは 'listening' イベントが発生した後、server.address().port を使用して取得できます。

host が省略された場合、IPv6 が利用可能な場合は 未指定の IPv6 アドレス (::) で、それ以外の場合は 未指定の IPv4 アドレス (0.0.0.0) でサーバーは接続を受け入れます。

ほとんどのオペレーティングシステムでは、未指定の IPv6 アドレス (::) をリッスンすると、net.Server未指定の IPv4 アドレス (0.0.0.0) もリッスンする可能性があります。

server.listening

追加: v5.7.0

  • <boolean> サーバーが接続をリッスンしているかどうかを示します。

server.maxConnections

[履歴]

バージョン変更点
v21.0.0maxConnections0 に設定すると、すべての受信接続がドロップされます。以前は、Infinity として解釈されていました。
v0.2.0追加: v0.2.0

接続数が server.maxConnections の閾値に達した場合:

ソケットが child_process.fork() で子プロセスに送信された後は、このオプションを使用することはお勧めしません。

server.dropMaxConnection

追加: v23.1.0

接続数が [server.maxConnections][] の閾値に達したら、接続の終了を開始するには、このプロパティを true に設定します。この設定は、クラスタモードでのみ有効です。

server.ref()

追加: v0.9.1

unref() の反対です。以前に unref されたサーバーで ref() を呼び出しても、それが残りの唯一のサーバーである場合、プログラムは終了しません(デフォルトの動作)。サーバーが ref されている場合、ref() を再度呼び出しても効果はありません。

server.unref()

追加: v0.9.1

サーバーで unref() を呼び出すと、イベントシステムでこれが唯一のアクティブなサーバーである場合に、プログラムを終了できます。サーバーがすでに unref されている場合、unref() を再度呼び出しても効果はありません。

クラス: net.Socket

追加: v0.3.4

このクラスは、TCPソケットまたはストリーミングIPCエンドポイントの抽象化です(Windowsでは名前付きパイプを使用し、それ以外の場合はUnixドメインソケットを使用します)。また、EventEmitterでもあります。

net.Socketは、ユーザーが作成してサーバーと直接やり取りするために使用できます。たとえば、net.createConnection()によって返されるため、ユーザーはそれを使用してサーバーと通信できます。

また、Node.jsによって作成され、接続を受信したときにユーザーに渡されることもあります。たとえば、net.Serverで発行される'connection'イベントのリスナーに渡されるため、ユーザーはそれを使用してクライアントとやり取りできます。

new net.Socket([options])

[履歴]

バージョン変更点
v15.14.0AbortSignal のサポートが追加されました。
v12.10.0onread オプションが追加されました。
v0.3.4追加: v0.3.4
  • options <Object> 利用可能なオプションは次のとおりです:

    • allowHalfOpen <boolean> false に設定すると、ソケットは読み取り側が終了したときに書き込み側を自動的に終了します。 詳細は、net.createServer()'end' イベントを参照してください。 デフォルト: false

    • fd <number> 指定された場合、指定されたファイルディスクリプタを持つ既存のソケットをラップします。それ以外の場合は、新しいソケットが作成されます。

    • onread <Object> 指定された場合、受信データは単一の buffer に格納され、ソケットにデータが到着すると提供された callback に渡されます。 これにより、ストリーミング機能はデータを提供しなくなります。 ソケットは通常どおり 'error''end'、および 'close' などのイベントを発行します。 pause()resume() などのメソッドも期待どおりに動作します。

    • buffer <Buffer> | <Uint8Array> | <Function> 受信データの保存に使用する再利用可能なメモリのチャンク、またはそのようなものを返す関数。

    • callback <Function> この関数は、受信データのチャンクごとに呼び出されます。 2 つの引数が渡されます: buffer に書き込まれたバイト数と buffer への参照。 この関数から false を返すと、暗黙的にソケットを pause() します。 この関数はグローバルコンテキストで実行されます。

    • readable <boolean> fd が渡されたときにソケットでの読み取りを許可します。それ以外の場合は無視されます。 デフォルト: false

    • signal <AbortSignal> ソケットの破棄に使用できる Abort シグナル。

    • writable <boolean> fd が渡されたときにソケットでの書き込みを許可します。それ以外の場合は無視されます。 デフォルト: false

  • 戻り値: <net.Socket>

新しいソケットオブジェクトを作成します。

新しく作成されたソケットは、TCP ソケットまたはストリーミング IPC エンドポイントのいずれかになります。これは、connect() で接続するものによって異なります。

イベント: 'close'

追加: v0.1.90

  • hadError <boolean> ソケットが伝送エラーを起こした場合 true

ソケットが完全に閉じられたときに一度だけ発生します。引数 hadError は、ソケットが伝送エラーによって閉じられたかどうかを示すブール値です。

イベント: 'connect'

追加: v0.1.90

ソケット接続が正常に確立されたときに発生します。net.createConnection() を参照してください。

イベント: 'connectionAttempt'

追加: v21.6.0, v20.12.0

  • ip <string> ソケットが接続を試みている IP アドレス。
  • port <number> ソケットが接続を試みているポート。
  • family <number> IP のファミリー。IPv6 の場合は 6、IPv4 の場合は 4 になります。

新しい接続試行が開始されたときに発生します。これは、socket.connect(options) でファミリーの自動選択アルゴリズムが有効になっている場合、複数回発生する可能性があります。

イベント: 'connectionAttemptFailed'

追加: v21.6.0, v20.12.0

  • ip <string> ソケットが接続を試みた IP アドレス。
  • port <number> ソケットが接続を試みたポート。
  • family <number> IP のファミリー。IPv6 の場合は 6、IPv4 の場合は 4 になります。
  • error <Error> 失敗に関連付けられたエラー。

接続試行が失敗したときに発生します。これは、socket.connect(options) でファミリーの自動選択アルゴリズムが有効になっている場合、複数回発生する可能性があります。

イベント: 'connectionAttemptTimeout'

追加: v21.6.0, v20.12.0

  • ip <string> ソケットが接続を試みたIPアドレス。
  • port <number> ソケットが接続を試みたポート。
  • family <number> IPアドレスのファミリー。IPv6の場合は6、IPv4の場合は4になります。

接続試行がタイムアウトした場合に発生します。これは、socket.connect(options)でファミリーの自動選択アルゴリズムが有効になっている場合にのみ発生します(複数回発生する可能性があります)。

イベント: 'data'

追加: v0.1.90

データを受信したときに発生します。引数 dataBuffer または String になります。データのエンコーディングは、socket.setEncoding() によって設定されます。

Socket'data' イベントを発生させるときにリスナーがない場合、データは失われます。

イベント: 'drain'

追加: v0.1.90

書き込みバッファーが空になったときに発生します。アップロードを調整するために使用できます。

参考: socket.write() の戻り値。

イベント: 'end'

追加: v0.1.90

ソケットの相手側が送信の終了を通知したときに発生し、ソケットの読み取り可能な側を終了させます。

デフォルトでは(allowHalfOpenfalse)、ソケットは送信終了パケットを返送し、保留中の書き込みキューを書き出した後、ファイル記述子を破棄します。ただし、allowHalfOpentrue に設定されている場合、ソケットは自動的に書き込み可能な側を end() しないため、ユーザーは任意の量のデータを書き込むことができます。ユーザーは接続を閉じるために(つまり、FINパケットを返送するために)明示的に end() を呼び出す必要があります。

イベント: 'error'

追加: v0.1.90

エラーが発生したときに発生します。このイベントの直後に 'close' イベントが呼び出されます。

イベント: 'lookup'

[履歴]

バージョン変更点
v5.10.0host パラメーターがサポートされるようになりました。
v0.11.3追加: v0.11.3

ホスト名を解決した後、接続する前に発生します。Unixソケットには適用されません。

イベント: 'ready'

追加: v9.11.0

ソケットが使用できる状態になったときに発生します。

'connect' の直後にトリガーされます。

イベント: 'timeout'

追加: v0.1.90

ソケットが非アクティブのためにタイムアウトした場合に発生します。これは、ソケットがアイドル状態になったことを通知するためだけのものです。ユーザーは手動で接続を閉じる必要があります。

参照: socket.setTimeout()

socket.address()

[履歴]

バージョン変更点
v18.4.0family プロパティが、数値ではなく文字列を返すようになりました。
v18.0.0family プロパティが、文字列ではなく数値を返すようになりました。
v0.1.90追加: v0.1.90

オペレーティングシステムによって報告された、ソケットのバインドされた address、アドレスの family 名、および port を返します: { port: 12346, family: 'IPv4', address: '127.0.0.1' }

socket.autoSelectFamilyAttemptedAddresses

追加: v19.4.0, v18.18.0

このプロパティは、socket.connect(options) で family autoselection アルゴリズムが有効になっている場合にのみ存在し、試行されたアドレスの配列です。

各アドレスは $IP:$PORT の形式の文字列です。接続が成功した場合、最後のアドレスはソケットが現在接続されているアドレスです。

socket.bufferSize

追加: v0.3.8

非推奨: v14.6.0 以降

[安定版: 0 - 非推奨]

安定版: 0 安定性: 0 - 非推奨: 代わりに writable.writableLength を使用してください。

このプロパティは、書き込みのためにバッファリングされた文字数を示します。バッファには、エンコード後の長さがまだ不明な文字列が含まれている場合があります。したがって、この数値はバッファ内のバイト数の概算にすぎません。

net.Socket には socket.write() が常に動作するという特性があります。これは、ユーザーがすばやく起動して実行できるようにするためです。コンピュータは、ソケットに書き込まれるデータの量に常に追いつくことができるとは限りません。ネットワーク接続が遅すぎるだけかもしれません。Node.js は、ソケットに書き込まれたデータを内部的にキューに入れ、可能になったらネットワーク経由で送信します。

この内部バッファリングの結果として、メモリが増加する可能性があります。bufferSize が大きい、または増え続けている場合は、socket.pause()socket.resume() を使用して、プログラムのデータフローを「スロットル」することを試みる必要があります。

socket.bytesRead

追加: v0.5.3

受信したバイト数。

socket.bytesWritten

Added in: v0.5.3

送信されたバイト数。

socket.connect()

与えられたソケット上で接続を開始します。

利用可能なシグネチャ:

この関数は非同期です。接続が確立されると、'connect' イベントが発行されます。接続に問題がある場合、'connect' イベントの代わりに、エラーが 'error' リスナーに渡され、'error' イベントが発行されます。最後のパラメーター connectListener が指定されている場合、'connect' イベントのリスナーとして一度だけ追加されます。

この関数は、'close' が発行された後、ソケットを再接続する場合にのみ使用する必要があります。そうでない場合、未定義の動作につながる可能性があります。

socket.connect(options[, connectListener])

[履歴]

バージョン変更点
v19.4.0autoSelectFamily オプションのデフォルト値は、setDefaultAutoSelectFamily またはコマンドラインオプション --enable-network-family-autoselection を使用して実行時に変更できます。
v20.0.0, v18.18.0autoSelectFamily オプションのデフォルト値が true になりました。--enable-network-family-autoselection CLI フラグの名前が --network-family-autoselection に変更されました。古い名前はエイリアスになりましたが、推奨されません。
v19.3.0, v18.13.0autoSelectFamily オプションが追加されました。
v17.7.0, v16.15.0noDelaykeepAlive、および keepAliveInitialDelay オプションがサポートされるようになりました。
v6.0.0hints オプションは、すべての場合においてデフォルトで 0 になりました。以前は、family オプションがない場合、デフォルトで `dns.ADDRCONFIG
v5.11.0hints オプションがサポートされるようになりました。
v0.1.90Added in: v0.1.90

与えられたソケット上で接続を開始します。通常、このメソッドは不要です。ソケットは net.createConnection() で作成およびオープンする必要があります。カスタムソケットを実装する場合にのみこれを使用してください。

TCP 接続の場合、利用可能な options は次のとおりです。

  • autoSelectFamily <boolean>: true に設定すると、RFC 8305 のセクション 5 を緩やかに実装するファミリー自動検出アルゴリズムが有効になります。lookup に渡される all オプションは true に設定され、ソケットは接続が確立されるまで、取得したすべての IPv6 および IPv4 アドレスに順番に接続を試みます。最初に返された AAAA アドレスが最初に試され、次に最初に返された A アドレス、次に 2 番目に返された AAAA アドレスというように試行されます。各接続試行 (最後の試行を除く) には、autoSelectFamilyAttemptTimeout オプションで指定された時間が与えられ、タイムアウトして次のアドレスを試行します。family オプションが 0 でない場合、または localAddress が設定されている場合は無視されます。少なくとも 1 つの接続が成功した場合、接続エラーは発行されません。すべての接続試行が失敗した場合、すべての失敗した試行を含む単一の AggregateError が発行されます。デフォルト: net.getDefaultAutoSelectFamily()
  • autoSelectFamilyAttemptTimeout <number>: autoSelectFamily オプションを使用する場合に、次のアドレスを試行する前に、接続試行が完了するのを待つ時間 (ミリ秒単位)。10 未満の正の整数に設定すると、代わりに値 10 が使用されます。デフォルト: net.getDefaultAutoSelectFamilyAttemptTimeout()
  • family <number>: IP スタックのバージョン。46、または 0 である必要があります。値 0 は、IPv4 と IPv6 の両方のアドレスが許可されることを示します。デフォルト: 0
  • hints <number> オプションの dns.lookup() ヒント
  • host <string> ソケットが接続するホスト。デフォルト: 'localhost'
  • keepAlive <boolean> true に設定すると、接続が確立された直後にソケットでキープアライブ機能が有効になります。これは socket.setKeepAlive() で行われることと同様です。デフォルト: false
  • keepAliveInitialDelay <number> 正の数に設定すると、アイドル状態のソケットで最初のキープアライブプローブが送信されるまでの初期遅延を設定します。デフォルト: 0
  • localAddress <string> ソケットが接続するローカルアドレス。
  • localPort <number> ソケットが接続するローカルポート。
  • lookup <Function> カスタムルックアップ関数。デフォルト: dns.lookup()
  • noDelay <boolean> true に設定すると、ソケットが確立された直後に Nagle アルゴリズムの使用が無効になります。デフォルト: false
  • port <number> 必須。ソケットが接続するポート。
  • blockList <net.BlockList> blockList は、特定の IP アドレス、IP 範囲、または IP サブネットへのアウトバウンドアクセスを無効にするために使用できます。

IPC 接続の場合、利用可能な options は次のとおりです。

  • path <string> 必須。クライアントが接続するパス。IPC 接続のパスの識別 を参照してください。指定された場合、上記の TCP 固有のオプションは無視されます。

socket.connect(path[, connectListener])

指定されたソケットで IPC 接続を開始します。

options として { path: path } を指定して呼び出された socket.connect(options[, connectListener]) のエイリアス。

socket.connect(port[, host][, connectListener])

Added in: v0.1.90

  • port <number> クライアントが接続するポート。
  • host <string> クライアントが接続するホスト。
  • connectListener <Function> socket.connect() メソッドの共通の引数。 'connect' イベントのリスナーとして一度だけ追加されます。
  • 戻り値: <net.Socket> ソケット自体。

指定されたソケットで TCP 接続を開始します。

options として {port: port, host: host} を指定して呼び出された socket.connect(options[, connectListener]) のエイリアス。

socket.connecting

Added in: v6.1.0

true の場合、socket.connect(options[, connectListener]) が呼び出され、まだ完了していません。 ソケットが接続されるまで true のままで、その後 false に設定され、'connect' イベントが発生します。 socket.connect(options[, connectListener]) コールバックは 'connect' イベントのリスナーであることに注意してください。

socket.destroy([error])

Added in: v0.1.90

このソケットでこれ以上 I/O アクティビティが発生しないようにします。ストリームを破棄し、接続を閉じます。

詳細については、writable.destroy() を参照してください。

socket.destroyed

  • <boolean> 接続が破棄されたかどうかを示します。接続が破棄されると、それ以上データ転送はできません。

詳細については、writable.destroyed を参照してください。

socket.destroySoon()

Added in: v0.3.4

すべてのデータが書き込まれた後にソケットを破棄します。'finish' イベントが既に発生している場合、ソケットは直ちに破棄されます。ソケットがまだ書き込み可能な場合は、暗黙的に socket.end() を呼び出します。

socket.end([data[, encoding]][, callback])

Added in: v0.1.90

ソケットを半分閉じます。つまり、FIN パケットを送信します。サーバーがまだデータを送信する可能性があります。

詳細については、writable.end() を参照してください。

socket.localAddress

Added in: v0.9.6

リモートクライアントが接続しているローカル IP アドレスの文字列表現。たとえば、'0.0.0.0' でリッスンしているサーバーで、クライアントが '192.168.1.1' で接続している場合、socket.localAddress の値は '192.168.1.1' になります。

socket.localPort

Added in: v0.9.6

ローカルポートを数値で表したものです。例えば、8021 などです。

socket.localFamily

Added in: v18.8.0, v16.18.0

ローカルIPファミリーを文字列で表したものです。 'IPv4' または 'IPv6'

socket.pause()

データの読み込みを一時停止します。つまり、'data' イベントは発行されません。アップロードを抑制するのに役立ちます。

socket.pending

Added in: v11.2.0, v10.16.0

.connect() がまだ呼び出されていないか、接続処理中の場合 (see socket.connecting)、ソケットがまだ接続されていない場合、これは true です。

socket.ref()

Added in: v0.9.1

unref() の反対で、以前に unref されたソケットで ref() を呼び出しても、それが唯一のソケットの場合、プログラムは終了しません (デフォルトの動作)。ソケットが ref されている場合、ref を再度呼び出しても効果はありません。

socket.remoteAddress

Added in: v0.5.10

リモート IP アドレスを文字列で表したものです。たとえば、'74.125.127.100''2001:4860:a005::68' などです。ソケットが破棄された場合 (クライアントが切断された場合など)、値は undefined になることがあります。

socket.remoteFamily

Added in: v0.11.14

リモート IP ファミリーを文字列で表したものです。 'IPv4' または 'IPv6'。ソケットが破棄された場合 (クライアントが切断された場合など)、値は undefined になることがあります。

socket.remotePort

Added in: v0.5.10

リモートポートの数値表現。 たとえば、8021 です。 ソケットが破棄された場合(クライアントが切断された場合など)、値は undefined になる可能性があります。

socket.resetAndDestroy()

Added in: v18.3.0, v16.17.0

RST パケットを送信して TCP 接続を閉じ、ストリームを破棄します。 この TCP ソケットが接続ステータスの場合、RST パケットを送信し、接続されるとすぐにこの TCP ソケットを破棄します。 そうでない場合、ERR_SOCKET_CLOSED エラーで socket.destroy を呼び出します。 これが TCP ソケットでない場合(パイプなど)、このメソッドを呼び出すと、すぐに ERR_INVALID_HANDLE_TYPE エラーがスローされます。

socket.resume()

socket.pause() の呼び出し後に読み取りを再開します。

socket.setEncoding([encoding])

Added in: v0.1.90

ソケットのエンコーディングを Readable Stream として設定します。 詳細については、readable.setEncoding() を参照してください。

socket.setKeepAlive([enable][, initialDelay])

[履歴]

バージョン変更
v13.12.0, v12.17.0TCP_KEEPCNT および TCP_KEEPINTVL ソケットオプションの新しいデフォルトが追加されました。
v0.1.92Added in: v0.1.92

キープアライブ機能を有効/無効にし、オプションでアイドルソケットで最初のキープアライブプローブが送信されるまでの初期遅延を設定します。

initialDelay(ミリ秒単位)を設定して、最後に受信したデータパケットと最初のキープアライブプローブの間の遅延を設定します。 initialDelay0 を設定すると、値はデフォルト(または以前の)設定から変更されません。

キープアライブ機能を有効にすると、次のソケットオプションが設定されます。

  • SO_KEEPALIVE=1
  • TCP_KEEPIDLE=initialDelay
  • TCP_KEEPCNT=10
  • TCP_KEEPINTVL=1

socket.setNoDelay([noDelay])

Added in: v0.1.90

Nagleアルゴリズムの使用を有効/無効にします。

TCP接続が作成されると、Nagleアルゴリズムが有効になります。

Nagleアルゴリズムは、データがネットワーク経由で送信される前に遅延させます。これは、レイテンシを犠牲にしてスループットを最適化しようとします。

noDelaytrueを渡すか、引数を渡さないと、ソケットのNagleアルゴリズムが無効になります。noDelayfalseを渡すと、Nagleアルゴリズムが有効になります。

socket.setTimeout(timeout[, callback])

[履歴]

バージョン変更点
v18.0.0callback引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACKの代わりにERR_INVALID_ARG_TYPEがスローされるようになりました。
v0.1.90Added in: v0.1.90

ソケットでtimeoutミリ秒の非アクティブ状態が続いた後、ソケットをタイムアウトするように設定します。デフォルトでは、net.Socketはタイムアウトを持ちません。

アイドルタイムアウトがトリガーされると、ソケットは'timeout'イベントを受信しますが、接続は切断されません。ユーザーは、接続を終了するために、socket.end()またはsocket.destroy()を手動で呼び出す必要があります。

js
socket.setTimeout(3000);
socket.on('timeout', () => {
  console.log('ソケットタイムアウト');
  socket.end();
});

timeoutが0の場合、既存のアイドルタイムアウトは無効になります。

オプションのcallbackパラメーターは、'timeout'イベントの1回限りのリスナーとして追加されます。

socket.timeout

Added in: v10.7.0

socket.setTimeout() で設定されたソケットのタイムアウトをミリ秒単位で表します。タイムアウトが設定されていない場合は undefined になります。

socket.unref()

Added in: v0.9.1

ソケットで unref() を呼び出すと、イベントシステム内でこれが唯一のアクティブなソケットである場合に、プログラムは終了できます。ソケットがすでに unref されている場合、再度 unref() を呼び出しても効果はありません。

socket.write(data[, encoding][, callback])

Added in: v0.1.90

ソケットにデータを送信します。2番目の引数は、文字列の場合のエンコーディングを指定します。デフォルトはUTF8エンコーディングです。

データ全体がカーネルバッファに正常にフラッシュされた場合は true を返します。データの一部または全部がユーザーメモリにキューイングされた場合は false を返します。バッファが再び空になったときに 'drain' が発行されます。

オプションの callback パラメータは、データが最終的に書き出されたときに実行されます。これはすぐには行われない場合があります。

詳細については、Writable ストリームの write() メソッドを参照してください。

socket.readyState

Added in: v0.5.0

このプロパティは、接続の状態を文字列として表します。

  • ストリームが接続中の場合、socket.readyStateopening です。
  • ストリームが読み取り可能かつ書き込み可能な場合、open です。
  • ストリームが読み取り可能で書き込み可能でない場合、readOnly です。
  • ストリームが読み取り可能でなく書き込み可能な場合、writeOnly です。

net.connect()

net.createConnection() のエイリアス。

可能なシグネチャ:

net.connect(options[, connectListener])

Added in: v0.7.0

net.createConnection(options[, connectListener]) のエイリアス。

net.connect(path[, connectListener])

Added in: v0.1.90

net.createConnection(path[, connectListener]) のエイリアス。

net.connect(port[, host][, connectListener])

Added in: v0.1.90

net.createConnection(port[, host][, connectListener]) のエイリアス。

net.createConnection()

新しいnet.Socketを作成し、socket.connect()で接続をすぐに開始し、接続を開始するnet.Socketを返すファクトリ関数です。

接続が確立されると、'connect'イベントが返されたソケットで発生します。最後のパラメータconnectListenerが提供された場合、'connect'イベントのリスナーとして一度追加されます。

使用可能なシグネチャ:

net.connect()関数は、この関数のエイリアスです。

net.createConnection(options[, connectListener])

追加: v0.1.90

利用可能なオプションについては、new net.Socket([options])およびsocket.connect(options[, connectListener])を参照してください。

追加のオプション:

  • timeout <number> 設定されている場合、ソケットの作成後、接続を開始する前に、socket.setTimeout(timeout)を呼び出すために使用されます。

net.createServer()セクションで説明されているエコーサーバーのクライアントの例を次に示します。

js
import net from 'node:net';
const client = net.createConnection({ port: 8124 }, () => {
  // 'connect' リスナー。
  console.log('サーバーに接続しました!');
  client.write('world!\r\n');
});
client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});
client.on('end', () => {
  console.log('サーバーから切断されました');
});
js
const net = require('node:net');
const client = net.createConnection({ port: 8124 }, () => {
  // 'connect' リスナー。
  console.log('サーバーに接続しました!');
  client.write('world!\r\n');
});
client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});
client.on('end', () => {
  console.log('サーバーから切断されました');
});

ソケット/tmp/echo.sockに接続するには:

js
const client = net.createConnection({ path: '/tmp/echo.sock' });

portおよびonreadオプションを使用するクライアントの例を次に示します。この場合、onreadオプションはnew net.Socket([options])を呼び出すためだけに使用され、portオプションはsocket.connect(options[, connectListener])を呼び出すために使用されます。

js
import net from 'node:net';
import { Buffer } from 'node:buffer';
net.createConnection({
  port: 8124,
  onread: {
    // ソケットからのすべての読み取りに対して4KiBのバッファーを再利用します。
    buffer: Buffer.alloc(4 * 1024),
    callback: function(nread, buf) {
      // 受信したデータは、0から`nread`までの`buf`で使用できます。
      console.log(buf.toString('utf8', 0, nread));
    },
  },
});
js
const net = require('node:net');
net.createConnection({
  port: 8124,
  onread: {
    // ソケットからのすべての読み取りに対して4KiBのバッファーを再利用します。
    buffer: Buffer.alloc(4 * 1024),
    callback: function(nread, buf) {
      // 受信したデータは、0から`nread`までの`buf`で使用できます。
      console.log(buf.toString('utf8', 0, nread));
    },
  },
});

net.createConnection(path[, connectListener])

Added in: v0.1.90

IPC接続を開始します。

この関数は、すべてのオプションがデフォルトに設定された新しいnet.Socketを作成し、socket.connect(path[, connectListener])との接続を直ちに開始し、接続を開始するnet.Socketを返します。

net.createConnection(port[, host][, connectListener])

Added in: v0.1.90

TCP接続を開始します。

この関数は、すべてのオプションがデフォルトに設定された新しいnet.Socketを作成し、socket.connect(port[, host][, connectListener])との接続を直ちに開始し、接続を開始するnet.Socketを返します。

net.createServer([options][, connectionListener])

[履歴]

バージョン変更点
v20.1.0, v18.17.0highWaterMark オプションがサポートされるようになりました。
v17.7.0, v16.15.0noDelay, keepAlive, および keepAliveInitialDelay オプションがサポートされるようになりました。
v0.5.0追加: v0.5.0
  • options <Object>

    • allowHalfOpen <boolean> false に設定した場合、ソケットは読み取り側が終了すると、書き込み側を自動的に終了します。 デフォルト: false
    • highWaterMark <number> オプションで、すべての net.SocketreadableHighWaterMark および writableHighWaterMark をオーバーライドします。 デフォルト: stream.getDefaultHighWaterMark() を参照してください。
    • keepAlive <boolean> true に設定した場合、socket.setKeepAlive() で行われるのと同様に、新しい受信接続を受信した直後に、ソケットで keep-alive 機能を有効にします。 デフォルト: false
    • keepAliveInitialDelay <number> 正の数に設定した場合、アイドル状態のソケットで最初の keepalive プローブが送信されるまでの初期遅延を設定します。 デフォルト: 0
    • noDelay <boolean> true に設定した場合、新しい受信接続を受信した直後に、Nagle アルゴリズムの使用を無効にします。 デフォルト: false
    • pauseOnConnect <boolean> 着信接続でソケットを一時停止するかどうかを示します。 デフォルト: false
    • blockList <net.BlockList> blockList は、特定の IP アドレス、IP 範囲、または IP サブネットへのインバウンドアクセスを無効にするために使用できます。 サーバーがリバースプロキシ、NAT などの背後にある場合、ブロックリストに対してチェックされるアドレスはプロキシのアドレス、または NAT によって指定されたアドレスであるため、これは機能しません。
  • connectionListener <Function> 'connection' イベントのリスナーとして自動的に設定されます。

  • 戻り値: <net.Server>

新しい TCP または IPC サーバーを作成します。

allowHalfOpentrue に設定されている場合、ソケットの相手側が送信の終了を通知すると、サーバーは socket.end() が明示的に呼び出された場合にのみ送信の終了を返送します。 たとえば、TCP のコンテキストでは、FIN パケットが受信されると、socket.end() が明示的に呼び出された場合にのみ FIN パケットが返送されます。 それまでは、接続はハーフクローズ(読み取り不可だが書き込み可能)です。 詳細については、'end' イベントと RFC 1122 (セクション 4.2.2.13) を参照してください。

pauseOnConnecttrue に設定されている場合、各着信接続に関連付けられたソケットは一時停止され、そのハンドルからデータは読み取られません。 これにより、データが元のプロセスによって読み取られることなく、プロセス間で接続を渡すことができます。 一時停止されたソケットからのデータの読み取りを開始するには、socket.resume() を呼び出します。

サーバーは、TCP サーバーまたは IPC サーバーになる可能性があります。これは、listen() 先によって異なります。

ポート 8124 で接続をリッスンする TCP エコーサーバーの例を次に示します。

js
import net from 'node:net';
const server = net.createServer((c) => {
  // 'connection' リスナー。
  console.log('client connected');
  c.on('end', () => {
    console.log('client disconnected');
  });
  c.write('hello\r\n');
  c.pipe(c);
});
server.on('error', (err) => {
  throw err;
});
server.listen(8124, () => {
  console.log('server bound');
});
js
const net = require('node:net');
const server = net.createServer((c) => {
  // 'connection' リスナー。
  console.log('client connected');
  c.on('end', () => {
    console.log('client disconnected');
  });
  c.write('hello\r\n');
  c.pipe(c);
});
server.on('error', (err) => {
  throw err;
});
server.listen(8124, () => {
  console.log('server bound');
});

telnet を使用してこれをテストします。

bash
telnet localhost 8124

ソケット /tmp/echo.sock でリッスンするには:

js
server.listen('/tmp/echo.sock', () => {
  console.log('server bound');
});

nc を使用して Unix ドメインソケットサーバーに接続します。

bash
nc -U /tmp/echo.sock

net.getDefaultAutoSelectFamily()

Added in: v19.4.0

socket.connect(options)autoSelectFamily オプションの現在のデフォルト値を取得します。初期デフォルト値は true です。ただし、コマンドラインオプション --no-network-family-autoselection が指定されている場合は除きます。

  • 戻り値: <boolean> autoSelectFamily オプションの現在のデフォルト値。

net.setDefaultAutoSelectFamily(value)

Added in: v19.4.0

socket.connect(options)autoSelectFamily オプションのデフォルト値を設定します。

  • value <boolean> 新しいデフォルト値。初期デフォルト値は true です。ただし、コマンドラインオプション --no-network-family-autoselection が指定されている場合は除きます。

net.getDefaultAutoSelectFamilyAttemptTimeout()

Added in: v19.8.0, v18.18.0

socket.connect(options)autoSelectFamilyAttemptTimeout オプションの現在のデフォルト値を取得します。初期デフォルト値は 250、またはコマンドラインオプション --network-family-autoselection-attempt-timeout で指定された値です。

  • 戻り値: <number> autoSelectFamilyAttemptTimeout オプションの現在のデフォルト値。

net.setDefaultAutoSelectFamilyAttemptTimeout(value)

Added in: v19.8.0, v18.18.0

socket.connect(options)autoSelectFamilyAttemptTimeout オプションのデフォルト値を設定します。

  • value <number> 新しいデフォルト値。正の数でなければなりません。数値が 10 未満の場合、代わりに値 10 が使用されます。初期デフォルト値は 250、またはコマンドラインオプション --network-family-autoselection-attempt-timeout で指定された値です。

net.isIP(input)

Added in: v0.3.0

input が IPv6 アドレスの場合、6 を返します。input が先頭にゼロのない ドット10進表記 の IPv4 アドレスの場合、4 を返します。それ以外の場合は、0 を返します。

js
net.isIP('::1'); // 6 を返す
net.isIP('127.0.0.1'); // 4 を返す
net.isIP('127.000.000.001'); // 0 を返す
net.isIP('127.0.0.1/24'); // 0 を返す
net.isIP('fhqwhgads'); // 0 を返す

net.isIPv4(input)

Added in: v0.3.0

input が先頭にゼロのない ドット10進表記 の IPv4 アドレスの場合、true を返します。それ以外の場合は、false を返します。

js
net.isIPv4('127.0.0.1'); // true を返す
net.isIPv4('127.000.000.001'); // false を返す
net.isIPv4('127.0.0.1/24'); // false を返す
net.isIPv4('fhqwhgads'); // false を返す

net.isIPv6(input)

Added in: v0.3.0

input が IPv6 アドレスの場合、true を返します。それ以外の場合は、false を返します。

js
net.isIPv6('::1'); // true を返す
net.isIPv6('fhqwhgads'); // false を返す