Skip to content

Net

[安定版: 2 - 安定版]

安定版: 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 ドメインとも呼ばれます。パスはファイルシステムのパス名です。パス名の長さが 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 の文字列エスケープでは、次のような追加のバックスラッシュエスケープを使用してパスを指定する必要があります。

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

追加: 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')) // 出力: true
console.log(blockList.check('10.0.0.3')) // 出力: true
console.log(blockList.check('222.111.111.222')) // 出力: false

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

blockList.rules

追加: v15.0.0, v14.18.0

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

BlockList.isBlockList(value)

追加: v23.4.0

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

クラス: net.SocketAddress

追加: v15.14.0, v14.18.0

new net.SocketAddress([options])

追加: 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 を返します。

クラス: net.Server

追加:v0.1.90

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

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

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

イベント: 'close'

追加:v0.5.0

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

イベント: 'connection'

追加バージョン: v0.1.90

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

イベント: 'error'

追加バージョン: v0.1.90

エラーが発生したときに発生します。net.Socketとは異なり、server.close() が手動で呼び出されない限り、このイベントの直後に '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())
})

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

server.close([callback])

追加: v0.1.90

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

server[Symbol.asyncDispose]()

追加: v20.5.0, v18.18.0

[安定版: 1 - 試験的]

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

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

server.getConnections(callback)

追加: v0.9.7

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

コールバックは、errcountの 2 つの引数をとる必要があります。

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 つの方法は、一定時間後に再試行することです。

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

追加: 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.14追加: 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> 関数。

  • 戻り値: <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])

追加: v0.1.90

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

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

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

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

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

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

  • 戻り値: <net.Socket>

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

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

イベント: '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)でファミリー自動選択アルゴリズムが有効になっている場合のみ存在し、試行されたアドレスの配列です。

各アドレスは$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

追加バージョン: 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.0noDelaykeepAlivekeepAliveInitialDelay オプションがサポートされるようになりました。
v6.0.0hints オプションは、すべての場合においてデフォルトで 0 になります。以前は、family オプションがない場合、`dns.ADDRCONFIG
v5.11.0hints オプションがサポートされるようになりました。
v0.1.90追加バージョン: v0.1.90

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

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

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

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

socket.connect(path[, connectListener])

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

{ path: path }optionsとして呼び出したsocket.connect(options[, connectListener])へのエイリアスです。

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

追加されたバージョン: v0.1.90

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

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

{port: port, host: host}optionsとして呼び出したsocket.connect(options[, connectListener])へのエイリアスです。

socket.connecting

追加されたバージョン: v6.1.0

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

socket.destroy([error])

追加: v0.1.90

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

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

socket.destroyed

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

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

socket.destroySoon()

追加: v0.3.4

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

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

追加: v0.1.90

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

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

socket.localAddress

追加: v0.9.6

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

socket.localPort

追加日時: v0.9.6

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

socket.localFamily

追加日時: v18.8.0, v16.18.0

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

socket.pause()

データの読み込みを一時停止します。つまり、'data'イベントは発生しません。アップロードの速度調整に役立ちます。

socket.pending

追加日時: v11.2.0, v10.16.0

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

socket.ref()

追加日時: v0.9.1

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

socket.remoteAddress

追加日時: v0.5.10

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

socket.remoteFamily

追加日時: v0.11.14

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

socket.remotePort

追加版: v0.5.10

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

socket.resetAndDestroy()

追加版: 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])

追加版: v0.1.90

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

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

[履歴]

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

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

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

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

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

socket.setNoDelay([noDelay])

追加日時: 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.90追加日時: v0.1.90

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

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

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

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

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

socket.timeout

追加日時: v10.7.0

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

socket.unref()

追加日時: v0.9.1

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

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

追加日時: v0.1.90

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

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

オプションのcallbackパラメータは、データが最終的に書き出されたときに実行されますが、すぐに実行されるとは限りません。

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

socket.readyState

追加: v0.5.0

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

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

net.connect()

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

可能なシグネチャ:

net.connect(options[, connectListener])

追加: v0.7.0

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

net.connect(path[, connectListener])

追加: v0.1.90

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

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

追加: 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' 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')
})
js
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に接続するには:

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: {
    // 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))
    },
  },
})
js
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])

追加日時: v0.1.90

IPC接続を開始します。

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

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

追加日時: 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.0noDelaykeepAlivekeepAliveInitialDelay オプションがサポートされました。
v0.5.0追加: v0.5.0
  • 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 エコーサーバーの例を次に示します。

js
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')
})
js
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を使用してテストします。

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()

追加日: v19.4.0

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

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

net.setDefaultAutoSelectFamily(value)

追加日: v19.4.0

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

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

net.getDefaultAutoSelectFamilyAttemptTimeout()

追加日: v19.8.0, v18.18.0

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

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

net.setDefaultAutoSelectFamilyAttemptTimeout(value)

追加日: v19.8.0, v18.18.0

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

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

net.isIP(input)

追加日: 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)

追加日: 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)

追加日: v0.3.0

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

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