Net#

安定性: 2 - Stable

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

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

以下のようにアクセスできます。

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

IPC サポート#

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

IPC 接続のパスを特定する#

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

Unix では、ローカルドメインは Unix ドメインとしても知られています。パスはファイルシステムのパス名です。パス名の長さが 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 では、ローカルドメインは名前付きパイプを使用して実装されます。パスは \\?\pipe\ または \\.\pipe\ のエントリを参照する*必要があります*。任意の文字が許可されていますが、後者は .. シーケンスの解決など、パイプ名の処理を行うことがあります。見た目とは裏腹に、パイプの名前空間はフラットです。パイプは持続*しません*。それらへの最後の参照が閉じられると削除されます。Unix ドメインソケットとは異なり、Windows は所有プロセスが終了するとパイプを閉じて削除します。

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

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

クラス: net.BlockList#

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

blockList.addAddress(address[, type])#

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

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

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

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

  • 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])#

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

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

// IPv6 notation for IPv4 addresses works:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true 

blockList.rules#

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

BlockList.isBlockList(value)#

  • value <any> 任意の JS 値
  • valuenet.BlockList の場合、true を返します。

blockList.fromJSON(value)#

安定性: 1 - Experimental

const blockList = new net.BlockList();
const data = [
  'Subnet: IPv4 192.168.1.0/24',
  'Address: IPv4 10.0.0.5',
  'Range: IPv4 192.168.2.1-192.168.2.10',
  'Range: IPv4 10.0.0.1-10.0.0.10',
];
blockList.fromJSON(data);
blockList.fromJSON(JSON.stringify(data)); 
  • value Blocklist.rules

blockList.toJSON()#

安定性: 1 - Experimental

  • Blocklist.rules を返します

クラス: net.SocketAddress#

new net.SocketAddress([options])#

  • 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#

socketaddress.family#

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

socketaddress.flowlabel#

socketaddress.port#

SocketAddress.parse(input)#

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

クラス: net.Server#

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

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

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

イベント: 'close'#

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

イベント: 'connection'#

新しい接続が確立されたときに発行されます。socketnet.Socket のインスタンスです。

イベント: 'error'#

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

イベント: 'listening'#

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

イベント: 'drop'#

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

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

server.address()#

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

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

const server = net.createServer((socket) => {
  socket.end('goodbye\n');
}).on('error', (err) => {
  // Handle errors here.
  throw err;
});

// Grab an arbitrary unused port.
server.listen(() => {
  console.log('opened server on', server.address());
}); 

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

server.close([callback])#

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

server[Symbol.asyncDispose]()#

server.close()を呼び出し、サーバーがクローズしたときに解決されるpromiseを返します。

server.getConnections(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.listen() 呼び出し中にエラーがあった場合、または server.close() が呼び出された場合にのみ、再度呼び出すことができます。それ以外の場合は、ERR_SERVER_ALREADY_LISTEN エラーがスローされます。

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

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])#

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

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

ファイルディスクリプタでのリスニングは Windows ではサポートされていません。

server.listen(options[, callback])#
  • 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> 関数。
  • 戻り値: <net.Server>

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

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

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

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

IPC サーバーを root として開始すると、サーバーパスが非特権ユーザーにはアクセスできなくなる可能性があります。readableAllwritableAll を使用すると、サーバーがすべてのユーザーにアクセス可能になります。

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

const controller = new AbortController();
server.listen({
  host: 'localhost',
  port: 80,
  signal: controller.signal,
});
// Later, when you want to close the server.
controller.abort(); 
server.listen(path[, backlog][, callback])#

指定された path で接続を待機する IPC サーバーを開始します。

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

指定された 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#

  • 型: <boolean> サーバーが接続を待機しているかどうかを示します。

server.maxConnections#

接続数が server.maxConnections のしきい値に達した場合

  1. プロセスがクラスターモードで実行されていない場合、Node.js は接続を閉じます。

  2. プロセスがクラスターモードで実行されている場合、Node.js はデフォルトで接続を別のワーカープロセスにルーティングします。代わりに接続を閉じるには、[server.dropMaxConnection][] を true に設定します。

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

server.dropMaxConnection#

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

server.ref()#

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

server.unref()#

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

クラス: net.Socket#

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

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

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

new net.Socket([options])#

  • 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>

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

新しく作成されたソケットは、connect() する対象に応じて、TCP ソケットまたはストリーミング IPC エンドポイントのいずれかになります。

イベント: 'close'#

  • hadError <boolean> ソケットに送信エラーがあった場合は true

ソケットが完全に閉じられると一度発行されます。引数 hadError は、ソケットが送信エラーのために閉じられたかどうかを示すブール値です。

イベント: 'connect'#

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

イベント: 'connectionAttempt'#

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

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

イベント: 'connectionAttemptFailed'#

  • ip <string> ソケットが接続を試みた IP。
  • port <number> ソケットが接続を試みたポート。
  • family <number> IP のファミリー。IPv6 の場合は 6、IPv4 の場合は 4 です。
  • error <Error> 失敗に関連するエラー。

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

イベント: 'connectionAttemptTimeout'#

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

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

イベント: 'data'#

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

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

イベント: 'drain'#

書き込みバッファが空になったときに発行されます。アップロードをスロットルするために使用できます。

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

イベント: 'end'#

ソケットのもう一方の端が送信終了を通知したときに発行され、ソケットの読み取り可能な側が終了します。

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

イベント: 'error'#

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

イベント: 'lookup'#

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

イベント: 'ready'#

ソケットが使用可能になったときに発行されます。

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

イベント: 'timeout'#

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

参照: socket.setTimeout()

socket.address()#

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

socket.autoSelectFamilyAttemptedAddresses#

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

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

socket.bufferSize#

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

このプロパティは、書き込み用にバッファリングされた文字数を示します。バッファには、エンコード後の長さがまだわからない文字列が含まれている可能性があるため、この数値はバッファ内のバイト数の近似値にすぎません。

net.Socket には socket.write() が常に機能するという特性があります。これは、ユーザーが迅速に立ち上げられるようにするためです。コンピュータは、ソケットに書き込まれるデータの量に常に追いつけるとは限りません。ネットワーク接続が単に遅すぎる可能性があります。Node.js は、ソケットに書き込まれたデータを内部的にキューに入れ、可能なときにネットワーク経由で送信します。

この内部バッファリングの結果、メモリが増大する可能性があります。bufferSize が大きいか増大しているユーザーは、プログラム内のデータフローを socket.pause()socket.resume() で「スロットル」することを試みるべきです。

socket.bytesRead#

受信したバイト数。

socket.bytesWritten#

送信されたバイト数。

socket.connect()#

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

可能なシグネチャ

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

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

socket.connect(options[, connectListener])#

指定されたソケットで接続を開始します。通常、このメソッドは必要ありません。ソケットは 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 接続を開始します。

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

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

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

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

socket.connecting#

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

socket.destroy([error])#

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

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

socket.destroyed#

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

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

socket.destroySoon()#

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

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

ソケットをハーフクローズします。つまり、FIN パケットを送信します。サーバーがまだデータを送信する可能性があります。

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

socket.localAddress#

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

socket.localPort#

ローカルポートの数値表現。例: 80 または 21

socket.localFamily#

ローカル IP ファミリーの文字列表現。'IPv4' または 'IPv6'

socket.pause()#

データの読み取りを一時停止します。つまり、'data' イベントは発行されません。アップロードをスロットルするのに便利です。

socket.pending#

.connect() がまだ呼び出されていないか、接続中であるため ( socket.connecting を参照)、ソケットがまだ接続されていない場合は true です。

socket.ref()#

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

socket.remoteAddress#

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

socket.remoteFamily#

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

socket.remotePort#

リモートポートの数値表現。例: 80 または 21。ソケットが破棄された場合 (例えば、クライアントが切断した場合)、値は undefined になることがあります。

socket.resetAndDestroy()#

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

socket.resume()#

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

socket.setEncoding([encoding])#

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

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

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

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

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

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

socket.setNoDelay([noDelay])#

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

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

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

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

socket.setTimeout(timeout[, callback])#

ソケットが timeout ミリ秒間非アクティブになった後にタイムアウトするように設定します。デフォルトでは、net.Socket にはタイムアウトがありません。

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

socket.setTimeout(3000);
socket.on('timeout', () => {
  console.log('socket timeout');
  socket.end();
}); 

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

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

socket.timeout#

socket.setTimeout() によって設定されたソケットのタイムアウト時間 (ミリ秒) です。タイムアウトが設定されていない場合は undefined です。

socket.unref()#

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

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

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

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

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

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

socket.readyState#

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

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

net.connect()#

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

可能なシグネチャ

net.connect(options[, connectListener])#

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

net.connect(path[, connectListener])#

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

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

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

net.createConnection()#

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

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

可能なシグネチャ

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

net.createConnection(options[, connectListener])#

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

追加のオプション

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

以下は、net.createServer() のセクションで説明されているエコーサーバーのクライアントの例です。

import net from 'node:net';
const client = net.createConnection({ port: 8124 }, () => {
  // 'connect' listener.
  console.log('connected to server!');
  client.write('world!\r\n');
});
client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});
client.on('end', () => {
  console.log('disconnected from server');
});const net = require('node:net');
const client = net.createConnection({ port: 8124 }, () => {
  // 'connect' listener.
  console.log('connected to server!');
  client.write('world!\r\n');
});
client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});
client.on('end', () => {
  console.log('disconnected from server');
});

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

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

以下は、portonread オプションを使用するクライアントの例です。この場合、onread オプションは new net.Socket([options]) を呼び出すためにのみ使用され、port オプションは socket.connect(options[, connectListener]) を呼び出すために使用されます。

import net from 'node:net';
import { Buffer } from 'node:buffer';
net.createConnection({
  port: 8124,
  onread: {
    // Reuses a 4KiB Buffer for every read from the socket.
    buffer: Buffer.alloc(4 * 1024),
    callback: function(nread, buf) {
      // Received data is available in `buf` from 0 to `nread`.
      console.log(buf.toString('utf8', 0, nread));
    },
  },
});const net = require('node:net');
net.createConnection({
  port: 8124,
  onread: {
    // Reuses a 4KiB Buffer for every read from the socket.
    buffer: Buffer.alloc(4 * 1024),
    callback: function(nread, buf) {
      // Received data is available in `buf` from 0 to `nread`.
      console.log(buf.toString('utf8', 0, nread));
    },
  },
});

net.createConnection(path[, connectListener])#

IPC 接続を開始します。

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

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

TCP接続を開始します。

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

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

  • options <Object>

    • allowHalfOpen <boolean> false に設定すると、読み取り側が終了したときにソケットは自動的に書き込み側を終了します。デフォルト: false
    • highWaterMark <number> オプションで、すべての net.SocketreadableHighWaterMarkwritableHighWaterMark を上書きします。デフォルト: stream.getDefaultHighWaterMark() を参照。
    • keepAlive <boolean> true に設定すると、socket.setKeepAlive() で行われることと同様に、新しい着信接続を受け取った直後にソケットでキープアライブ機能を有効にします。デフォルト: false
    • keepAliveInitialDelay <number> 正の数に設定すると、アイドルソケットで最初のキープアライブプローブが送信されるまでの初期遅延を設定します。デフォルト: 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() を呼び出します。

サーバーは、listen() する対象に応じて、TCPサーバーまたはIPCサーバーになります。

以下は、ポート8124で接続を待ち受けるTCPエコーサーバーの例です。

import net from 'node:net';
const server = net.createServer((c) => {
  // 'connection' listener.
  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');
});const net = require('node:net');
const server = net.createServer((c) => {
  // 'connection' listener.
  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 を使用してこれをテストします。

telnet localhost 8124 

ソケット /tmp/echo.sock で待ち受けるには

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

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

nc -U /tmp/echo.sock 

net.getDefaultAutoSelectFamily()#

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

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

net.setDefaultAutoSelectFamily(value)#

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

  • value <boolean> 新しいデフォルト値。コマンドラインオプション --no-network-family-autoselection が指定されていない限り、初期のデフォルト値は true です。

net.getDefaultAutoSelectFamilyAttemptTimeout()#

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

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

net.setDefaultAutoSelectFamilyAttemptTimeout(value)#

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

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

net.isIP(input)#

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

net.isIP('::1'); // returns 6
net.isIP('127.0.0.1'); // returns 4
net.isIP('127.000.000.001'); // returns 0
net.isIP('127.0.0.1/24'); // returns 0
net.isIP('fhqwhgads'); // returns 0 

net.isIPv4(input)#

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

net.isIPv4('127.0.0.1'); // returns true
net.isIPv4('127.000.000.001'); // returns false
net.isIPv4('127.0.0.1/24'); // returns false
net.isIPv4('fhqwhgads'); // returns false 

net.isIPv6(input)#

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

net.isIPv6('::1'); // returns true
net.isIPv6('fhqwhgads'); // returns false