Net
ソースコード: lib/net.js
node:net
モジュールは、ストリームベースの TCP または IPC サーバー (net.createServer()
) およびクライアント (net.createConnection()
) を作成するための非同期ネットワーク API を提供します。
以下を使用してアクセスできます:
import net from 'node:net';
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 の文字列エスケープでは、次のように、追加のバックスラッシュエスケープでパスを指定する必要があります:
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
address
<string> | <net.SocketAddress> IPv4 または IPv6 アドレス。type
<string>'ipv4'
または'ipv6'
のいずれか。 デフォルト:'ipv4'
。
指定された IP アドレスをブロックするルールを追加します。
blockList.addRange(start, end[, type])
追加: v15.0.0, v14.18.0
start
<string> | <net.SocketAddress> 範囲の開始 IPv4 または IPv6 アドレス。end
<string> | <net.SocketAddress> 範囲の終了 IPv4 または IPv6 アドレス。type
<string>'ipv4'
または'ipv6'
のいずれか。 デフォルト:'ipv4'
。
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
address
<string> | <net.SocketAddress> チェックするIPアドレスtype
<string>'ipv4'
または'ipv6'
のいずれか。 デフォルト:'ipv4'
。- 戻り値: <boolean>
与えられた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
// 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
- Type: <string[]>
ブロックリストに追加されたルールのリスト。
BlockList.isBlockList(value)
Added in: v23.4.0
value
<any> 任意の JS 値value
がnet.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>
socketaddress.address
追加: v15.14.0, v14.18.0
- 型: <string>
socketaddress.family
追加: v15.14.0, v14.18.0
- 型: <string>
'ipv4'
または'ipv6'
のいずれか。
socketaddress.flowlabel
追加: v15.14.0, v14.18.0
- 型: <number>
socketaddress.port
追加: v15.14.0, v14.18.0
- 型: <number>
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
- 拡張: <EventEmitter>
このクラスは、TCPまたはIPCサーバーを作成するために使用されます。
new net.Server([options][, connectionListener])
options
<Object>net.createServer([options][, connectionListener])
を参照してください。connectionListener
<Function>'connection'
イベントのリスナーとして自動的に設定されます。- 戻り値: <net.Server>
net.Server
は、次のイベントを持つEventEmitter
です。
Event: 'close'
追加: v0.5.0
サーバーが閉じるときに発生します。 接続が存在する場合、このイベントはすべての接続が終了するまで発生しません。
イベント: 'connection'
追加: v0.1.90
- <net.Socket> コネクションオブジェクト
新しいコネクションが確立されたときに発生します。socket
は net.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> イベントリスナーに渡される引数。
server.address()
[履歴]
バージョン | 変更点 |
---|---|
v18.4.0 | family プロパティが、数値の代わりに文字列を返すようになりました。 |
v18.0.0 | family プロパティが、文字列の代わりに数値を返すようになりました。 |
v0.1.90 | 追加: v0.1.90 |
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) => {
// エラーをここで処理します。
throw err;
});
// 任意の未使用ポートを取得します。
server.listen(() => {
console.log('opened server on', server.address());
});
server.address()
は、'listening'
イベントが発行される前、または server.close()
を呼び出した後には null
を返します。
server.close([callback])
追加: v0.1.90
callback
<Function> サーバーが閉じられたときに呼び出されます。- 戻り値: <net.Server>
サーバーが新しい接続を受け入れるのを停止し、既存の接続を維持します。 この関数は非同期であり、すべての接続が終了し、サーバーが 'close'
イベントを発行すると、サーバーは最終的に閉じられます。 オプションの callback
は、'close'
イベントが発生すると呼び出されます。 そのイベントとは異なり、サーバーが閉じられたときに開いていなかった場合、Error
が唯一の引数として呼び出されます。
server[Symbol.asyncDispose]()
Added in: v20.5.0, v18.18.0
server.close()
を呼び出し、サーバーが閉じたときに履行される Promise を返します。
server.getConnections(callback)
Added in: v0.9.7
callback
<Function>- 戻り値: <net.Server>
サーバー上の同時接続の数を非同期で取得します。ソケットがフォークに送信された場合に機能します。
Callback は、2 つの引数 err
と count
を取ります。
server.listen()
接続をリッスンするサーバーを開始します。net.Server
は、リッスンするものに応じて TCP または IPC サーバーになる可能性があります。
可能なシグネチャ:
server.listen(handle[, backlog][, callback])
server.listen(options[, callback])
- IPC サーバーの場合の
server.listen(path[, backlog][, callback])
- TCP サーバーの場合の
server.listen([port[, host[, backlog]]][, callback])
この関数は非同期です。サーバーがリスニングを開始すると、'listening'
イベントが発行されます。最後のパラメータ callback
は、'listening'
イベントのリスナーとして追加されます。
すべての listen()
メソッドは、保留中の接続キューの最大長を指定するために backlog
パラメータを取ることができます。実際の長さは、Linux 上の tcp_max_syn_backlog
や somaxconn
などの sysctl 設定を通じて OS によって決定されます。このパラメータのデフォルト値は 511 (512 ではない) です。
すべての net.Socket
は SO_REUSEADDR
に設定されます (詳細については socket(7)
を参照してください)。
最初の server.listen()
呼び出し中にエラーが発生した場合、または server.close()
が呼び出された場合にのみ、server.listen()
メソッドを再度呼び出すことができます。それ以外の場合は、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])
Added in: v0.5.10
handle
<Object>backlog
<number>server.listen()
関数の共通パラメータcallback
<Function>- 戻り値: <net.Server>
ポート、Unixドメインソケット、またはWindows名前付きパイプにすでにバインドされている指定されたhandle
で、接続をリッスンするサーバーを起動します。
handle
オブジェクトは、サーバー、ソケット(基になる_handle
メンバーを持つもの)、または有効なファイル記述子であるfd
メンバーを持つオブジェクトのいずれかになります。
ファイル記述子でのリスンは、Windowsではサポートされていません。
server.listen(options[, callback])
[履歴]
バージョン | 変更点 |
---|---|
v23.1.0 | reusePort オプションがサポートされました。 |
v15.6.0 | AbortSignal のサポートが追加されました。 |
v11.4.0 | ipv6Only オプションがサポートされました。 |
v0.11.14 | Added in: v0.11.14 |
options
<Object> 必須。次のプロパティをサポートします。backlog
<number>server.listen()
関数の共通パラメータ。exclusive
<boolean> デフォルト:false
host
<string>ipv6Only
<boolean> TCPサーバーの場合、ipv6Only
をtrue
に設定すると、デュアルスタックのサポートが無効になります。つまり、ホスト::
にバインドしても0.0.0.0
はバインドされません。 デフォルト:false
。reusePort
<boolean> TCPサーバーの場合、reusePort
をtrue
に設定すると、同じホスト上の複数のソケットが同じポートにバインドできるようになります。着信接続は、オペレーティングシステムによってリスンしているソケットに分散されます。このオプションは、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])
と同じように動作します。どちらも指定されていない場合は、エラーがスローされます。
exclusive
がfalse
(デフォルト)の場合、クラスタワーカーは同じ基になるハンドルを使用し、接続処理の責務を共有できます。exclusive
がtrue
の場合、ハンドルは共有されず、ポートの共有を試みるとエラーが発生します。排他的ポートでリスンする例を以下に示します。
server.listen({
host: 'localhost',
port: 80,
exclusive: true,
});
exclusive
がtrue
で、基になるハンドルが共有されている場合、複数のワーカーが異なるバックログを持つハンドルをクエリする可能性があります。この場合、マスタープロセスに渡される最初のbacklog
が使用されます。
IPCサーバーをルートとして起動すると、特権のないユーザーがサーバーパスにアクセスできなくなる可能性があります。readableAll
とwritableAll
を使用すると、すべてのユーザーがサーバーにアクセスできるようになります。
signal
オプションが有効になっている場合、対応するAbortController
で.abort()
を呼び出すことは、サーバーで.close()
を呼び出すのと似ています。
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
<string> サーバーがリッスンするパス。IPC接続のパスの識別を参照してください。backlog
<number>server.listen()
関数の共通パラメータ。callback
<Function>。- 戻り値: <net.Server>
指定された path
で接続をリッスンする IPC サーバーを起動します。
server.listen([port[, host[, backlog]]][, callback])
Added in: v0.1.90
port
<number>host
<string>backlog
<number>server.listen()
関数の共通パラメータ。callback
<Function>。- 戻り値: <net.Server>
指定された port
と host
で接続をリッスンする 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.0 | maxConnections を 0 に設定すると、すべての受信接続がドロップされます。以前は、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
- 戻り値: <net.Server>
unref()
の反対です。以前に unref
されたサーバーで ref()
を呼び出しても、それが残りの唯一のサーバーである場合、プログラムは終了しません(デフォルトの動作)。サーバーが ref
されている場合、ref()
を再度呼び出しても効果はありません。
server.unref()
追加: v0.9.1
- 戻り値: <net.Server>
サーバーで unref()
を呼び出すと、イベントシステムでこれが唯一のアクティブなサーバーである場合に、プログラムを終了できます。サーバーがすでに unref
されている場合、unref()
を再度呼び出しても効果はありません。
クラス: net.Socket
追加: v0.3.4
- 拡張: <stream.Duplex>
このクラスは、TCPソケットまたはストリーミングIPCエンドポイントの抽象化です(Windowsでは名前付きパイプを使用し、それ以外の場合はUnixドメインソケットを使用します)。また、EventEmitter
でもあります。
net.Socket
は、ユーザーが作成してサーバーと直接やり取りするために使用できます。たとえば、net.createConnection()
によって返されるため、ユーザーはそれを使用してサーバーと通信できます。
また、Node.jsによって作成され、接続を受信したときにユーザーに渡されることもあります。たとえば、net.Server
で発行される'connection'
イベントのリスナーに渡されるため、ユーザーはそれを使用してクライアントとやり取りできます。
new net.Socket([options])
[履歴]
バージョン | 変更点 |
---|---|
v15.14.0 | AbortSignal のサポートが追加されました。 |
v12.10.0 | onread オプションが追加されました。 |
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
データを受信したときに発生します。引数 data
は Buffer
または String
になります。データのエンコーディングは、socket.setEncoding()
によって設定されます。
Socket
が 'data'
イベントを発生させるときにリスナーがない場合、データは失われます。
イベント: 'drain'
追加: v0.1.90
書き込みバッファーが空になったときに発生します。アップロードを調整するために使用できます。
参考: socket.write()
の戻り値。
イベント: 'end'
追加: v0.1.90
ソケットの相手側が送信の終了を通知したときに発生し、ソケットの読み取り可能な側を終了させます。
デフォルトでは(allowHalfOpen
が false
)、ソケットは送信終了パケットを返送し、保留中の書き込みキューを書き出した後、ファイル記述子を破棄します。ただし、allowHalfOpen
が true
に設定されている場合、ソケットは自動的に書き込み可能な側を end()
しないため、ユーザーは任意の量のデータを書き込むことができます。ユーザーは接続を閉じるために(つまり、FINパケットを返送するために)明示的に end()
を呼び出す必要があります。
イベント: 'error'
追加: v0.1.90
エラーが発生したときに発生します。このイベントの直後に 'close'
イベントが呼び出されます。
イベント: 'lookup'
[履歴]
バージョン | 変更点 |
---|---|
v5.10.0 | host パラメーターがサポートされるようになりました。 |
v0.11.3 | 追加: v0.11.3 |
ホスト名を解決した後、接続する前に発生します。Unixソケットには適用されません。
err
<Error> | <null> エラーオブジェクト。dns.lookup()
を参照してください。address
<string> IPアドレス。family
<number> | <null> アドレスタイプ。dns.lookup()
を参照してください。host
<string> ホスト名。
イベント: 'ready'
追加: v9.11.0
ソケットが使用できる状態になったときに発生します。
'connect'
の直後にトリガーされます。
イベント: 'timeout'
追加: v0.1.90
ソケットが非アクティブのためにタイムアウトした場合に発生します。これは、ソケットがアイドル状態になったことを通知するためだけのものです。ユーザーは手動で接続を閉じる必要があります。
参照: socket.setTimeout()
。
socket.address()
[履歴]
バージョン | 変更点 |
---|---|
v18.4.0 | family プロパティが、数値ではなく文字列を返すようになりました。 |
v18.0.0 | family プロパティが、文字列ではなく数値を返すようになりました。 |
v0.1.90 | 追加: v0.1.90 |
- 戻り値: <Object>
オペレーティングシステムによって報告された、ソケットのバインドされた 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()
与えられたソケット上で接続を開始します。
利用可能なシグネチャ:
socket.connect(options[, connectListener])
- IPC 接続の場合:
socket.connect(path[, connectListener])
- TCP 接続の場合:
socket.connect(port[, host][, connectListener])
- 戻り値: <net.Socket> ソケット自体。
この関数は非同期です。接続が確立されると、'connect'
イベントが発行されます。接続に問題がある場合、'connect'
イベントの代わりに、エラーが 'error'
リスナーに渡され、'error'
イベントが発行されます。最後のパラメーター connectListener
が指定されている場合、'connect'
イベントのリスナーとして一度だけ追加されます。
この関数は、'close'
が発行された後、ソケットを再接続する場合にのみ使用する必要があります。そうでない場合、未定義の動作につながる可能性があります。
socket.connect(options[, connectListener])
[履歴]
バージョン | 変更点 |
---|---|
v19.4.0 | autoSelectFamily オプションのデフォルト値は、setDefaultAutoSelectFamily またはコマンドラインオプション --enable-network-family-autoselection を使用して実行時に変更できます。 |
v20.0.0, v18.18.0 | autoSelectFamily オプションのデフォルト値が true になりました。--enable-network-family-autoselection CLI フラグの名前が --network-family-autoselection に変更されました。古い名前はエイリアスになりましたが、推奨されません。 |
v19.3.0, v18.13.0 | autoSelectFamily オプションが追加されました。 |
v17.7.0, v16.15.0 | noDelay 、keepAlive 、および keepAliveInitialDelay オプションがサポートされるようになりました。 |
v6.0.0 | hints オプションは、すべての場合においてデフォルトで 0 になりました。以前は、family オプションがない場合、デフォルトで `dns.ADDRCONFIG |
v5.11.0 | hints オプションがサポートされるようになりました。 |
v0.1.90 | Added in: v0.1.90 |
options
<Object>connectListener
<Function>socket.connect()
メソッドの共通のパラメーター。'connect'
イベントのリスナーとして一度だけ追加されます。- 戻り値: <net.Socket> ソケット自体。
与えられたソケット上で接続を開始します。通常、このメソッドは不要です。ソケットは 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 スタックのバージョン。4
、6
、または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])
path
<string> クライアントが接続するパス。 IPC接続のパスの識別 を参照してください。connectListener
<Function>socket.connect()
メソッドの共通の引数。'connect'
イベントのリスナーとして一度だけ追加されます。- 戻り値: <net.Socket> ソケット自体。
指定されたソケットで 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
error
<Object>- 戻り値: <net.Socket>
このソケットでこれ以上 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
data
<string> | <Buffer> | <Uint8Array>encoding
<string> data がstring
の場合のみ使用されます。デフォルト:'utf8'
。callback
<Function> ソケットが終了したときのオプションのコールバック。- 戻り値: <net.Socket> ソケット自体。
ソケットを半分閉じます。つまり、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
ローカルポートを数値で表したものです。例えば、80
や 21
などです。
socket.localFamily
Added in: v18.8.0, v16.18.0
ローカルIPファミリーを文字列で表したものです。 'IPv4'
または 'IPv6'
。
socket.pause()
- 戻り値: <net.Socket> ソケット自体。
データの読み込みを一時停止します。つまり、'data'
イベントは発行されません。アップロードを抑制するのに役立ちます。
socket.pending
Added in: v11.2.0, v10.16.0
.connect()
がまだ呼び出されていないか、接続処理中の場合 (see socket.connecting
)、ソケットがまだ接続されていない場合、これは true
です。
socket.ref()
Added in: v0.9.1
- 戻り値: <net.Socket> ソケット自体。
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
リモートポートの数値表現。 たとえば、80
や 21
です。 ソケットが破棄された場合(クライアントが切断された場合など)、値は undefined
になる可能性があります。
socket.resetAndDestroy()
Added in: v18.3.0, v16.17.0
- 戻り値: <net.Socket>
RST パケットを送信して TCP 接続を閉じ、ストリームを破棄します。 この TCP ソケットが接続ステータスの場合、RST パケットを送信し、接続されるとすぐにこの TCP ソケットを破棄します。 そうでない場合、ERR_SOCKET_CLOSED
エラーで socket.destroy
を呼び出します。 これが TCP ソケットでない場合(パイプなど)、このメソッドを呼び出すと、すぐに ERR_INVALID_HANDLE_TYPE
エラーがスローされます。
socket.resume()
- 戻り値: <net.Socket> ソケット自体。
socket.pause()
の呼び出し後に読み取りを再開します。
socket.setEncoding([encoding])
Added in: v0.1.90
encoding
<string>- 戻り値: <net.Socket> ソケット自体。
ソケットのエンコーディングを Readable Stream として設定します。 詳細については、readable.setEncoding()
を参照してください。
socket.setKeepAlive([enable][, initialDelay])
[履歴]
バージョン | 変更 |
---|---|
v13.12.0, v12.17.0 | TCP_KEEPCNT および TCP_KEEPINTVL ソケットオプションの新しいデフォルトが追加されました。 |
v0.1.92 | Added in: v0.1.92 |
enable
<boolean> デフォルト:false
initialDelay
<number> デフォルト:0
- 戻り値: <net.Socket> ソケット自体。
キープアライブ機能を有効/無効にし、オプションでアイドルソケットで最初のキープアライブプローブが送信されるまでの初期遅延を設定します。
initialDelay
(ミリ秒単位)を設定して、最後に受信したデータパケットと最初のキープアライブプローブの間の遅延を設定します。 initialDelay
に 0
を設定すると、値はデフォルト(または以前の)設定から変更されません。
キープアライブ機能を有効にすると、次のソケットオプションが設定されます。
SO_KEEPALIVE=1
TCP_KEEPIDLE=initialDelay
TCP_KEEPCNT=10
TCP_KEEPINTVL=1
socket.setNoDelay([noDelay])
Added in: v0.1.90
noDelay
<boolean> デフォルト:true
- 戻り値: <net.Socket> ソケット自体。
Nagleアルゴリズムの使用を有効/無効にします。
TCP接続が作成されると、Nagleアルゴリズムが有効になります。
Nagleアルゴリズムは、データがネットワーク経由で送信される前に遅延させます。これは、レイテンシを犠牲にしてスループットを最適化しようとします。
noDelay
にtrue
を渡すか、引数を渡さないと、ソケットのNagleアルゴリズムが無効になります。noDelay
にfalse
を渡すと、Nagleアルゴリズムが有効になります。
socket.setTimeout(timeout[, callback])
[履歴]
バージョン | 変更点 |
---|---|
v18.0.0 | callback 引数に無効なコールバックを渡すと、ERR_INVALID_CALLBACK の代わりにERR_INVALID_ARG_TYPE がスローされるようになりました。 |
v0.1.90 | Added in: v0.1.90 |
timeout
<number>callback
<Function>- 戻り値: <net.Socket> ソケット自体。
ソケットでtimeout
ミリ秒の非アクティブ状態が続いた後、ソケットをタイムアウトするように設定します。デフォルトでは、net.Socket
はタイムアウトを持ちません。
アイドルタイムアウトがトリガーされると、ソケットは'timeout'
イベントを受信しますが、接続は切断されません。ユーザーは、接続を終了するために、socket.end()
またはsocket.destroy()
を手動で呼び出す必要があります。
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
- 戻り値: <net.Socket> ソケット自体。
ソケットで unref()
を呼び出すと、イベントシステム内でこれが唯一のアクティブなソケットである場合に、プログラムは終了できます。ソケットがすでに unref
されている場合、再度 unref()
を呼び出しても効果はありません。
socket.write(data[, encoding][, callback])
Added in: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string>data
がstring
の場合のみ使用されます。デフォルト:utf8
。callback
<Function>- 戻り値: <boolean>
ソケットにデータを送信します。2番目の引数は、文字列の場合のエンコーディングを指定します。デフォルトはUTF8エンコーディングです。
データ全体がカーネルバッファに正常にフラッシュされた場合は true
を返します。データの一部または全部がユーザーメモリにキューイングされた場合は false
を返します。バッファが再び空になったときに 'drain'
が発行されます。
オプションの callback
パラメータは、データが最終的に書き出されたときに実行されます。これはすぐには行われない場合があります。
詳細については、Writable
ストリームの write()
メソッドを参照してください。
socket.readyState
Added in: v0.5.0
このプロパティは、接続の状態を文字列として表します。
- ストリームが接続中の場合、
socket.readyState
はopening
です。 - ストリームが読み取り可能かつ書き込み可能な場合、
open
です。 - ストリームが読み取り可能で書き込み可能でない場合、
readOnly
です。 - ストリームが読み取り可能でなく書き込み可能な場合、
writeOnly
です。
net.connect()
net.createConnection()
のエイリアス。
可能なシグネチャ:
net.connect(options[, connectListener])
- IPC 接続の場合、
net.connect(path[, connectListener])
。 - TCP 接続の場合、
net.connect(port[, host][, connectListener])
。
net.connect(options[, connectListener])
Added in: v0.7.0
options
<Object>connectListener
<Function>- 戻り値: <net.Socket>
net.createConnection(options[, connectListener])
のエイリアス。
net.connect(path[, connectListener])
Added in: v0.1.90
path
<string>connectListener
<Function>- 戻り値: <net.Socket>
net.createConnection(path[, connectListener])
のエイリアス。
net.connect(port[, host][, connectListener])
Added in: v0.1.90
port
<number>host
<string>connectListener
<Function>- 戻り値: <net.Socket>
net.createConnection(port[, host][, connectListener])
のエイリアス。
net.createConnection()
新しいnet.Socket
を作成し、socket.connect()
で接続をすぐに開始し、接続を開始するnet.Socket
を返すファクトリ関数です。
接続が確立されると、'connect'
イベントが返されたソケットで発生します。最後のパラメータconnectListener
が提供された場合、'connect'
イベントのリスナーとして一度追加されます。
使用可能なシグネチャ:
net.createConnection(options[, connectListener])
- IPC接続の場合、
net.createConnection(path[, connectListener])
。 - TCP接続の場合、
net.createConnection(port[, host][, connectListener])
。
net.connect()
関数は、この関数のエイリアスです。
net.createConnection(options[, connectListener])
追加: v0.1.90
options
<Object> 必須。new net.Socket([options])
の呼び出しとsocket.connect(options[, connectListener])
メソッドの両方に渡されます。connectListener
<Function>net.createConnection()
関数の共通パラメータ。提供された場合、返されたソケットの'connect'
イベントのリスナーとして一度追加されます。- 戻り値: <net.Socket> 接続を開始するために使用される、新しく作成されたソケット。
利用可能なオプションについては、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' リスナー。
console.log('サーバーに接続しました!');
client.write('world!\r\n');
});
client.on('data', (data) => {
console.log(data.toString());
client.end();
});
client.on('end', () => {
console.log('サーバーから切断されました');
});
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
に接続するには:
const client = net.createConnection({ path: '/tmp/echo.sock' });
port
およびonread
オプションを使用するクライアントの例を次に示します。この場合、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: {
// ソケットからのすべての読み取りに対して4KiBのバッファーを再利用します。
buffer: Buffer.alloc(4 * 1024),
callback: function(nread, buf) {
// 受信したデータは、0から`nread`までの`buf`で使用できます。
console.log(buf.toString('utf8', 0, nread));
},
},
});
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
path
<string> ソケットが接続するパス。socket.connect(path[, connectListener])
に渡されます。IPC接続のパスの識別を参照してください。connectListener
<Function>net.createConnection()
関数の共通パラメータで、開始ソケットの'connect'
イベントの"once"リスナーです。socket.connect(path[, connectListener])
に渡されます。- 戻り値: <net.Socket> 接続を開始するために使用される新しく作成されたソケット。
IPC接続を開始します。
この関数は、すべてのオプションがデフォルトに設定された新しいnet.Socket
を作成し、socket.connect(path[, connectListener])
との接続を直ちに開始し、接続を開始するnet.Socket
を返します。
net.createConnection(port[, host][, connectListener])
Added in: v0.1.90
port
<number> ソケットが接続するポート。socket.connect(port[, host][, connectListener])
に渡されます。host
<string> ソケットが接続するホスト。socket.connect(port[, host][, connectListener])
に渡されます。 デフォルト:'localhost'
。connectListener
<Function>net.createConnection()
関数の共通パラメータで、開始ソケットの'connect'
イベントの"once"リスナーです。socket.connect(port[, host][, connectListener])
に渡されます。- 戻り値: <net.Socket> 接続を開始するために使用される新しく作成されたソケット。
TCP接続を開始します。
この関数は、すべてのオプションがデフォルトに設定された新しいnet.Socket
を作成し、socket.connect(port[, host][, connectListener])
との接続を直ちに開始し、接続を開始するnet.Socket
を返します。
net.createServer([options][, connectionListener])
[履歴]
バージョン | 変更点 |
---|---|
v20.1.0, v18.17.0 | highWaterMark オプションがサポートされるようになりました。 |
v17.7.0, v16.15.0 | noDelay , keepAlive , および keepAliveInitialDelay オプションがサポートされるようになりました。 |
v0.5.0 | 追加: v0.5.0 |
options
<Object>allowHalfOpen
<boolean>false
に設定した場合、ソケットは読み取り側が終了すると、書き込み側を自動的に終了します。 デフォルト:false
。highWaterMark
<number> オプションで、すべてのnet.Socket
のreadableHighWaterMark
および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 サーバーを作成します。
allowHalfOpen
が true
に設定されている場合、ソケットの相手側が送信の終了を通知すると、サーバーは socket.end()
が明示的に呼び出された場合にのみ送信の終了を返送します。 たとえば、TCP のコンテキストでは、FIN パケットが受信されると、socket.end()
が明示的に呼び出された場合にのみ FIN パケットが返送されます。 それまでは、接続はハーフクローズ(読み取り不可だが書き込み可能)です。 詳細については、'end'
イベントと RFC 1122 (セクション 4.2.2.13) を参照してください。
pauseOnConnect
が true
に設定されている場合、各着信接続に関連付けられたソケットは一時停止され、そのハンドルからデータは読み取られません。 これにより、データが元のプロセスによって読み取られることなく、プロセス間で接続を渡すことができます。 一時停止されたソケットからのデータの読み取りを開始するには、socket.resume()
を呼び出します。
サーバーは、TCP サーバーまたは IPC サーバーになる可能性があります。これは、listen()
先によって異なります。
ポート 8124 で接続をリッスンする TCP エコーサーバーの例を次に示します。
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');
});
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
を使用してこれをテストします。
telnet localhost 8124
ソケット /tmp/echo.sock
でリッスンするには:
server.listen('/tmp/echo.sock', () => {
console.log('server bound');
});
nc
を使用して Unix ドメインソケットサーバーに接続します。
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
を返します。
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
を返します。
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
を返します。
net.isIPv6('::1'); // true を返す
net.isIPv6('fhqwhgads'); // false を返す