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 ドメインとも呼ばれます。パスはファイルシステムのパス名です。パス名の長さが 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
追加されたバージョン: 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])
追加: 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')) // 出力: 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
- 型: <string[]>
ブロックリストに追加されたルールのリスト。
BlockList.isBlockList(value)
追加: v23.4.0
value
<any> 任意の JS 値value
がnet.BlockList
である場合、true
を返します。
クラス: net.SocketAddress
追加: v15.14.0, v14.18.0
new net.SocketAddress([options])
追加: 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
を返します。
クラス: 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
です。
イベント: 'close'
追加:v0.5.0
サーバーが閉じられたときに発生します。接続が存在する場合は、すべての接続が終了するまでこのイベントは発生しません。
イベント: 'connection'
追加バージョン: v0.1.90
- <net.Socket> 接続オブジェクト
新しい接続が確立されたときに発生します。socket
は net.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> イベントリスナーに渡される引数。
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())
})
'listening'
イベントが発行される前、またはserver.close()
を呼び出した後は、server.address()
はnull
を返します。
server.close([callback])
追加: v0.1.90
callback
<Function> サーバーが閉じられたときに呼び出されます。- 戻り値: <net.Server>
サーバーが新しい接続を受け入れるのを停止し、既存の接続を維持します。この関数は非同期です。すべての接続が終了し、サーバーが'close'
イベントを発行すると、サーバーは最終的に閉じられます。オプションのcallback
は'close'
イベントが発生するとすぐに呼び出されます。そのイベントとは異なり、サーバーが閉じられたときに開いていなかった場合は、Error
を唯一の引数として呼び出されます。
server[Symbol.asyncDispose]()
追加: v20.5.0, v18.18.0
server.close()
を呼び出し、サーバーがクローズされたときに解決される Promise を返します。
server.getConnections(callback)
追加: v0.9.7
callback
<Function>- 戻り値: <net.Server>
サーバー上の同時接続数を非同期的に取得します。ソケットがフォークに送信された場合にも機能します。
コールバックは、err
とcount
の 2 つの引数をとる必要があります。
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.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])
追加: 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 | 追加: 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> 関数。戻り値: <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])
追加: v0.1.90
path
<string> サーバーがリスンするパス。IPC 接続のパスを特定するを参照してください。backlog
<number>server.listen()
関数の共通パラメーター。callback
<Function>。- 戻り値: <net.Server>
指定されたpath
で接続をリスンするIPCサーバーを開始します。
server.listen([port[, host[, backlog]]][, callback])
追加: 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> この関数は、受信データの各チャンクに対して呼び出されます。この関数には、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
データ受信時に発生します。引数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)
でファミリー自動選択アルゴリズムが有効になっている場合のみ存在し、試行されたアドレスの配列です。
各アドレスは$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()
指定されたソケットで接続を開始します。
可能なシグネチャ:
socket.connect(options[, connectListener])
socket.connect(path[, connectListener])
IPC接続の場合。socket.connect(port[, host][, connectListener])
TCP 接続の場合。- 戻り値: <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 | 追加バージョン: v0.1.90 |
options
<オブジェクト>connectListener
<関数>socket.connect()
メソッドの共通パラメーター。'connect'
イベントのリスナーとして一度だけ追加されます。- 戻り値: <net.Socket> ソケット自体。
指定されたソケットで接続を開始します。通常、このメソッドは必要ありません。ソケットは 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 スタックのバージョン。4
、6
、または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
は次のとおりです。
path
<文字列> 必須。クライアントが接続するパス。IPC 接続のパスを特定するを参照してください。指定されている場合、上記の TCP 固有のオプションは無視されます。
socket.connect(path[, connectListener])
path
<string> クライアントが接続するパス。IPC 接続のパスを識別するを参照してください。connectListener
<Function>socket.connect()
メソッドの共通パラメーター。'connect'
イベントのリスナーとして一度追加されます。- 戻り値: <net.Socket> ソケット自体。
指定されたソケットで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
error
<Object>- 戻り値: <net.Socket>
このソケット上でこれ以上の 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
data
<string> | <Buffer> | <Uint8Array>encoding
<string>data
がstring
の場合のみ使用されます。デフォルト:'utf8'
。callback
<Function> ソケットが終了した時のオプションのコールバック。- 戻り値: <net.Socket> ソケット自体。
ソケットをハーフクローズします。つまり、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()
- 戻り値: <net.Socket> ソケット自身。
データの読み込みを一時停止します。つまり、'data'
イベントは発生しません。アップロードの速度調整に役立ちます。
socket.pending
追加日時: v11.2.0, v10.16.0
ソケットがまだ接続されていない場合、.connect()
がまだ呼び出されていないか、接続処理中である場合(socket.connecting
を参照)、true
になります。
socket.ref()
追加日時: v0.9.1
- 戻り値: <net.Socket> ソケット自身。
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
- 戻り値: <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])
追加版: v0.1.90
encoding
<文字列>- 戻り値: <net.Socket> ソケット自体。
Readable Streamとしてソケットのエンコーディングを設定します。詳細はreadable.setEncoding()
を参照してください。
socket.setKeepAlive([enable][, initialDelay])
[履歴]
バージョン | 変更内容 |
---|---|
v13.12.0, v12.17.0 | TCP_KEEPCNT およびTCP_KEEPINTVL ソケットオプションの新しいデフォルト値が追加されました。 |
v0.1.92 | 追加版: v0.1.92 |
enable
<ブール値> デフォルト:false
initialDelay
<数値> デフォルト:0
- 戻り値: <net.Socket> ソケット自体。
キープアライブ機能を有効/無効にし、アイドル状態のソケットに最初のキープアライブプローブが送信されるまでの初期遅延をオプションで設定します。
initialDelay
(ミリ秒単位)を設定して、最後に受信したデータパケットと最初のキープアライブプローブ間の遅延を設定します。initialDelay
に0
を設定すると、値はデフォルト(または以前の)設定から変更されません。
キープアライブ機能を有効にすると、次のソケットオプションが設定されます。
SO_KEEPALIVE=1
TCP_KEEPIDLE=initialDelay
TCP_KEEPCNT=10
TCP_KEEPINTVL=1
socket.setNoDelay([noDelay])
追加日時: 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 | 追加日時: 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 timeout')
socket.end()
})
timeout
が 0 の場合、既存のアイドルタイムアウトは無効になります。
オプションのcallback
パラメーターは、'timeout'
イベントのワンタイムリスナーとして追加されます。
socket.timeout
追加日時: v10.7.0
socket.setTimeout()
で設定された、ミリ秒単位のソケットタイムアウト。タイムアウトが設定されていない場合はundefined
。
socket.unref()
追加日時: v0.9.1
- 戻り値: <net.Socket> ソケット自体。
ソケットでunref()
を呼び出すと、これがイベントシステム内の唯一のアクティブなソケットである場合、プログラムを終了できます。ソケットが既にunref
されている場合、unref()
を再度呼び出しても効果はありません。
socket.write(data[, encoding][, callback])
追加日時: 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
追加: v0.5.0
このプロパティは、接続の状態を文字列で表します。
- ストリームが接続中の場合、
socket.readyState
はopening
です。 - ストリームが読み取り可能かつ書き込み可能な場合、
open
です。 - ストリームが読み取り可能だが書き込み不可能な場合、
readOnly
です。 - ストリームが読み取り不可能かつ書き込み不可能な場合、
writeOnly
です。
net.connect()
net.createConnection()
のエイリアスです。
可能なシグネチャ:
net.connect(options[, connectListener])
net.connect(path[, connectListener])
IPC接続用。net.connect(port[, host][, connectListener])
TCP 接続用。
net.connect(options[, connectListener])
追加: v0.7.0
options
<Object>connectListener
<Function>- 戻り値: <net.Socket>
net.createConnection(options[, connectListener])
のエイリアスです。
net.connect(path[, connectListener])
追加: v0.1.90
path
<string>connectListener
<Function>- 戻り値: <net.Socket>
net.createConnection(path[, connectListener])
のエイリアスです。
net.connect(port[, host][, connectListener])
追加: 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' 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' })
以下は、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: {
// 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])
追加日時: v0.1.90
path
<string> ソケットが接続するパス。socket.connect(path[, connectListener])
に渡されます。IPC 接続のパスを識別するを参照してください。connectListener
<Function>net.createConnection()
関数の共通パラメーター。開始ソケットの'connect'
イベントに対する「一度だけ」のリスナーです。socket.connect(path[, connectListener])
に渡されます。- 戻り値: <net.Socket> 接続開始に使用される新しく作成されたソケット。
IPC接続を開始します。
この関数は、すべてのオプションをデフォルトに設定した新しいnet.Socket
を作成し、socket.connect(path[, connectListener])
を使用してすぐに接続を開始し、接続を開始するnet.Socket
を返します。
net.createConnection(port[, host][, connectListener])
追加日時: v0.1.90
port
<number> ソケットが接続するポート。socket.connect(port[, host][, connectListener])
に渡されます。host
<string> ソケットが接続するホスト。socket.connect(port[, host][, connectListener])
に渡されます。デフォルト:'localhost'
。connectListener
<Function>net.createConnection()
関数の共通パラメーター。開始ソケットの'connect'
イベントに対する「一度だけ」のリスナーです。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()
で行われていることと同様です。デフォルト: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サーバーを作成します。
allowHalfOpen
がtrue
に設定されている場合、ソケットの反対側が伝送の終了をシグナルすると、socket.end()
が明示的に呼び出されるまで、サーバーは伝送の終了のみを返します。たとえば、TCP のコンテキストでは、FIN パケットを受信しても、socket.end()
が明示的に呼び出されるまで、FIN パケットは返されません。それまでは、接続はハーフクローズド(読み取り不可だが書き込み可能)です。詳細については、'end'
イベントとRFC 1122(セクション 4.2.2.13)を参照してください。
pauseOnConnect
がtrue
に設定されている場合、各着信接続に関連付けられたソケットは一時停止され、そのハンドルからデータは読み取られません。これにより、元のプロセスによってデータが読み取られることなく、接続をプロセス間で渡すことができます。一時停止されたソケットからデータの読み取りを開始するには、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')
})
nc
を使用して Unix ドメインソケットサーバーに接続します。
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
を返します。
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
を返します。
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
を返します。
net.isIPv6('::1') // trueを返す
net.isIPv6('fhqwhgads') // falseを返す