Spec-Zone.ru › Node.js 24 LTS

Сеть

Стабильность: 2 — Стабильный

Исходный код: lib/net.js

Модуль node:net предоставляет асинхронный сетевой API для создания TCP-серверов на основе потоков или серверов IPC (net.createServer()) и клиентов (net.createConnection()).

К нему можно получить доступ с помощью:

Модули JavaScript
import net from 'node:net';
CommonJS
const net = require('node:net');

Поддержка IPC

История
Версия Изменения
v20.8.0

Добавлена поддержка привязки к абстрактному пути сокета домена Unix, например \0abstract. Для Node.js можно привязать '\0' < v20.4.0.

Модуль node:net поддерживает IPC с именованными каналами в Windows и сокетами домена Unix в других операционных системах.

Определение путей для IPC-соединений

net.connect(), net.createConnection(), server.listen() и socket.connect() принимают параметр path для указания конечных точек IPC.

В Unix локальный домен также известен как домен Unix. Путь представляет собой путь в файловой системе. Если длина пути превышает длину sizeof(sockaddr_un.sun_path), будет выброшена ошибка. Типичные значения — 107 байт в Linux и 103 байта в macOS. Если абстракция API Node.js создает сокет домена Unix, она также удалит его. Например, net.createServer() может создать сокет домена Unix, а server.close() удалит его. Если же пользователь создает сокет домена Unix за пределами этих абстракций, ему нужно будет удалить его самостоятельно. То же относится к ситуации, когда API Node.js создает сокет домена Unix, но затем программа аварийно завершается. Иными словами, сокет домена Unix виден в файловой системе и сохраняется до тех пор, пока не будет удален. В Linux можно использовать абстрактный сокет Unix, добавив \0 в начало пути, например \0abstract. Путь к абстрактному сокету Unix не виден в файловой системе, и сокет исчезает автоматически после закрытия всех открытых ссылок на него.

В Windows локальный домен реализован с помощью именованного канала. Путь должен указывать на запись в \\?\pipe\ или \\.\pipe\. Допускаются любые символы, но последний вариант может выполнять обработку имен каналов, например разрешать последовательности ... Несмотря на внешний вид, пространство имен каналов является плоским. Каналы не сохраняются. Они удаляются после закрытия последней ссылки на них. В отличие от сокетов домена Unix, Windows закрывает и удаляет канал после завершения процесса-владельца.

Для экранирования строк JavaScript пути необходимо указывать с дополнительным экранированием обратной косой черты, например:

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

Класс: net.BlockList

Добавлено в: v15.0.0, v14.18.0

Объект BlockList можно использовать с некоторыми сетевыми API для задания правил, запрещающих входящий или исходящий доступ к определенным IP-адресам, диапазонам IP-адресов или подсетям IP.

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'.

Добавляет правило для блокировки диапазона IP-адресов от start (включительно) до end (включительно).

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>

Возвращает true, если указанный IP-адрес соответствует какому-либо правилу, добавленному в BlockList.

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

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

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

blockList.rules

Добавлено в: v15.0.0, v14.18.0
  • Тип: <string[]>

Список правил, добавленных в список блокировки.

BlockList.isBlockList(value)

Добавлено в: v23.4.0, v22.13.0
  • value <any> Любое значение JS
  • Возвращает true, если value является net.BlockList.

blockList.fromJSON(value)

Стабильность: 1 — Экспериментальный
const blockList = new net.BlockList();
const data = [
  'Subnet: IPv4 192.168.1.0/24',
  'Address: IPv4 10.0.0.5',
  'Range: IPv4 192.168.2.1-192.168.2.10',
  'Range: IPv4 10.0.0.1-10.0.0.10',
];
blockList.fromJSON(data);
blockList.fromJSON(JSON.stringify(data)); copy
  • value Blocklist.rules

blockList.toJSON()

Стабильность: 1 — Экспериментальный
  • Возвращает Blocklist.rules

Класс: net.SocketAddress

Добавлено в: v15.14.0, v14.18.0

new net.SocketAddress([options])

Добавлено в: v15.14.0, v14.18.0
  • options <Object>
    • address <string> Сетевой адрес в виде строки IPv4 или IPv6. По умолчанию: '127.0.0.1', если family — 'ipv4'; '::', если family — 'ipv6'.
    • family <string> Одно из значений: 'ipv4' или 'ipv6'. По умолчанию: 'ipv4'.
    • flowlabel <number> Метка потока IPv6, используемая только если family — 'ipv6'.
    • port <number> IP-порт.

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, v22.13.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
  • Тип: <Error>

Генерируется при возникновении ошибки. В отличие от net.Socket, событие 'close' не будет сгенерировано сразу после этого события, если только не вызвать вручную server.close(). См. пример в обсуждении server.listen().

Событие: 'listening'

Добавлено в: v0.1.90

Генерируется после привязки сервера при вызове server.listen().

Событие: 'drop'

Добавлено в: v18.6.0, v16.17.0

Когда число подключений достигает порогового значения server.maxConnections, сервер будет отклонять новые подключения и вместо этого генерировать событие 'drop'. Для TCP-сервера аргумент имеет следующий вид, в противном случае аргументом является undefined.

  • data <Object> Аргумент, передаваемый обработчику события.
    • localAddress <string> Локальный адрес.
    • localPort <number> Локальный порт.
    • localFamily <string> Локальное семейство адресов.
    • remoteAddress <string> Удалённый адрес.
    • remotePort <number> Удалённый порт.
    • remoteFamily <string> Семейство IP-адресов удалённого узла. 'IPv4' или 'IPv6'.

server.address()

История
Версия Изменения
v18.4.0

Теперь свойство family возвращает строку вместо числа.

v18.0.0

Теперь свойство family возвращает число вместо строки.

v0.1.90

Добавлено в: v0.1.90

  • Возвращает: <Object> | <string> | <null>

Возвращает связанный address, имя адреса family и port сервера, указанные операционной системой, если сервер прослушивает IP-сокет (это полезно для определения назначенного системой порта при получении адреса, назначенного ОС): { port: 12346, family: 'IPv4', address: '127.0.0.1' }.

Для сервера, прослушивающего канал или доменный сокет Unix, имя возвращается в виде строки.

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

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

server.address() возвращает null до генерации события 'listening' или после вызова server.close().

server.close([callback])

Добавлено в: v0.1.90
  • callback <Function> Вызывается при закрытии сервера.
  • Возвращает: <net.Server>

Прекращает приём новых подключений сервером, сохраняя существующие подключения. Эта функция асинхронна: сервер окончательно закрывается, когда все подключения завершены и сервер генерирует событие 'close'. Необязательный параметр callback будет вызван при возникновении события 'close'. В отличие от этого события, он получит Error в качестве единственного аргумента, если сервер не был открыт на момент закрытия.

server[Symbol.asyncDispose]()

История
Версия Изменения
v24.2.0

Больше не является экспериментальным.

v20.5.0, v18.18.0

Добавлено в: v20.5.0, v18.18.0

Вызывает server.close() и возвращает промис, который выполняется после закрытия сервера.

server.getConnections(callback)

Добавлено в: v0.9.7
  • callback <Function>
  • Возвращает: <net.Server>

Асинхронно получает число одновременных подключений к серверу. Работает, даже если сокеты были переданы дочерним процессам.

Функция обратного вызова должна принимать два аргумента: err и count.

server.listen()

Запускает сервер, прослушивающий подключения. net.Server может быть TCP- или IPC-сервером в зависимости от того, что он прослушивает.

Возможные сигнатуры:

  • server.listen(handle[, backlog][, callback])
  • server.listen(options[, callback])
  • server.listen(path[, backlog][, callback]) для IPC-серверов
  • server.listen([port[, host[, backlog]]][, callback]) для TCP-серверов

Эта функция асинхронна. Когда сервер начинает прослушивать подключения, генерируется событие 'listening'. Последний параметр callback будет добавлен в качестве обработчика события 'listening'.

Все методы listen() могут принимать параметр backlog, задающий максимальную длину очереди ожидающих подключений. Фактическую длину определяет ОС с помощью настроек sysctl, таких как tcp_max_syn_backlog и somaxconn в Linux. Значение этого параметра по умолчанию — 511 (не 512).

Для всех net.Socket устанавливается значение SO_REUSEADDR (подробности см. в socket(7)).

Метод server.listen() можно вызвать повторно только в том случае, если при первом вызове server.listen() произошла ошибка или был вызван server.close(). В противном случае будет выброшена ошибка ERR_SERVER_ALREADY_LISTEN.

Одна из наиболее распространённых ошибок при начале прослушивания — EADDRINUSE. Она возникает, когда другой сервер уже прослушивает запрошенные port/path/handle. Один из способов обработать её — повторить попытку через некоторое время:

server.on('error', (e) => {
  if (e.code === 'EADDRINUSE') {
    console.error('Address in use, retrying...');
    setTimeout(() => {
      server.close();
      server.listen(PORT, HOST);
    }, 1000);
  }
}); copy
server.listen(handle[, backlog][, callback])
Добавлено в: v0.5.10
  • handle <Object>
  • backlog <number> Общий параметр функций server.listen()
  • callback <Function>
  • Возвращает: <net.Server>

Запускает сервер, прослушивающий подключения на заданном handle, уже привязанном к порту, доменному сокету Unix или именованному каналу Windows.

Объект handle может быть сервером, сокетом (любым объектом с базовым свойством _handle) или объектом со свойством fd, содержащим допустимый файловый дескриптор.

Прослушивание файлового дескриптора в Windows не поддерживается.

server.listen(options[, callback])
История
Версия Изменения
v23.1.0, v22.12.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,
}); copy

Когда exclusive равно true и базовый дескриптор является общим, несколько рабочих процессов могут запрашивать дескриптор с разными значениями backlog. В этом случае будет использовано первое значение backlog, переданное главному процессу.

Запуск IPC-сервера от имени root может сделать путь сервера недоступным для непривилегированных пользователей. Использование readableAll и writableAll сделает сервер доступным для всех пользователей.

Если параметр signal включён, вызов .abort() для соответствующего AbortController аналогичен вызову .close() для сервера:

const controller = new AbortController();
server.listen({
  host: 'localhost',
  port: 80,
  signal: controller.signal,
});
// Later, when you want to close the server.
controller.abort(); copy
server.listen(path[, backlog][, callback])
Добавлено в: v0.1.90
  • path <string> Путь, который должен прослушивать сервер. См. раздел Определение путей для IPC-подключений.
  • backlog <number> Общий параметр функций server.listen().
  • callback <Function>.
  • Возвращает: <net.Server>

Запускает IPC-сервер, прослушивающий подключения по указанному path.

server.listen([port[, host[, backlog]]][, callback])
Добавлено в: v0.1.90
  • port <number>
  • host <string>
  • backlog <number> Общий параметр функций server.listen().
  • callback <Function>.
  • Возвращает: <net.Server>

Запускает TCP-сервер, прослушивающий подключения на указанном port и host.

Если port не указан или равен 0, операционная система назначит произвольный свободный порт. Его можно получить с помощью server.address().port после генерации события 'listening'.

Если 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

  • Тип: <integer>

Когда число подключений достигает порогового значения server.maxConnections:

  1. Если процесс не запущен в режиме кластера, Node.js закроет подключение.

  2. Если процесс запущен в режиме кластера, Node.js по умолчанию перенаправит подключение в другой рабочий процесс. Чтобы вместо этого закрыть подключение, установите server.dropMaxConnection в значение true.

Не рекомендуется использовать этот параметр после передачи сокета дочернему процессу с помощью child_process.fork().

server.dropMaxConnection

Добавлено в: v23.1.0, v22.12.0
  • Тип: <boolean>

Установите для этого свойства значение true, чтобы начать закрывать подключения при достижении порогового значения [server.maxConnections][]. Эта настройка действует только в режиме кластера.

server.ref()

Добавлено в: v0.9.1
  • Возвращает: <net.Server>

Противоположность unref(): вызов ref() для сервера, ранее помеченного как unref, не позволит программе завершиться, если это единственный оставшийся сервер (поведение по умолчанию). Если сервер уже помечен как ref, повторный вызов ref() не повлияет на него.

server.unref()

Добавлено в: v0.9.1
  • Возвращает: <net.Server>

Вызов unref() для сервера позволит программе завершиться, если это единственный активный сервер в системе событий. Если сервер уже помечен как unref, повторный вызов unref() не повлияет на него.

Class: net.Socket

Добавлено в: v0.3.4
  • Расширяет: <stream.Duplex>

Этот класс представляет собой абстракцию TCP-сокета или потоковой конечной точки IPC (в Windows используются именованные каналы, в остальных системах — доменные сокеты Unix). Это также EventEmitter.

Пользователь может создать net.Socket и использовать его напрямую для взаимодействия с сервером. Например, он возвращается функцией net.createConnection(), чтобы пользователь мог обмениваться данными с сервером.

Также он может быть создан Node.js и передан пользователю при получении соединения. Например, он передаётся обработчикам события 'connection', генерируемого объектом net.Server, чтобы пользователь мог взаимодействовать с клиентом.

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.
    • blockList <net.BlockList> blockList можно использовать для отключения исходящего доступа к определённым IP-адресам, диапазонам IP-адресов или подсетям.
    • fd <number> Если задано, оборачивает существующий сокет с указанным файловым дескриптором; в противном случае создаётся новый сокет.
    • keepAlive <boolean> Если задано значение true, сразу после установления соединения на сокете включается функция keep-alive, аналогично тому, как это делается в socket.setKeepAlive(). По умолчанию: false.
    • keepAliveInitialDelay <number> Если задано положительное число, оно устанавливает начальную задержку перед отправкой первого keepalive-запроса через бездействующий сокет. По умолчанию: 0.
    • noDelay <boolean> Если задано значение true, сразу после установления соединения для сокета отключается алгоритм Нагла. По умолчанию: false.
    • onread <Object> Если задано, входящие данные сохраняются в одном buffer и передаются указанному callback при поступлении данных в сокет. При этом потоковая функциональность не будет предоставлять данные. Сокет по-прежнему будет генерировать события, такие как 'error', 'end' и 'close'. Методы, такие как pause() и resume(), также будут работать ожидаемым образом.
      • buffer <Buffer> | <Uint8Array> | <Function> Либо повторно используемый фрагмент памяти для хранения входящих данных, либо функция, возвращающая такой фрагмент.
      • callback <Function> Эта функция вызывается для каждого фрагмента входящих данных. Ей передаются два аргумента: количество байтов, записанных в 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-адреса. Может быть 6 для IPv6 или 4 для IPv4.

Генерируется при начале новой попытки подключения. Событие может генерироваться несколько раз, если в параметрах socket.connect(options) включён алгоритм автоматического выбора семейства адресов.

Событие: 'connectionAttemptFailed'

Добавлено в: v21.6.0, v20.12.0
  • ip <string> IP-адрес, к которому сокет пытался подключиться.
  • port <number> Порт, к которому сокет пытался подключиться.
  • family <number> Семейство IP-адреса. Может быть 6 для IPv6 или 4 для IPv4.
  • error <Error> Ошибка, связанная со сбоем.

Генерируется при неудачной попытке подключения. Событие может генерироваться несколько раз, если в параметрах socket.connect(options) включён алгоритм автоматического выбора семейства адресов.

Событие: 'connectionAttemptTimeout'

Добавлено в: v21.6.0, v20.12.0
  • ip <string> IP-адрес, к которому сокет пытался подключиться.
  • port <number> Порт, к которому сокет пытался подключиться.
  • family <number> Семейство IP-адреса. Может быть 6 для IPv6 или 4 для IPv4.

Генерируется при превышении времени ожидания попытки подключения. Событие генерируется только (и может генерироваться несколько раз), если в параметрах socket.connect(options) включён алгоритм автоматического выбора семейства адресов.

Событие: 'data'

Добавлено в: v0.1.90
  • Тип: <Buffer> | <string>

Генерируется при получении данных. Аргумент 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
  • Тип: <Error>

Генерируется при возникновении ошибки. Сразу после этого события вызывается событие '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
  • Тип: <string[]>

Это свойство присутствует только в том случае, если в параметрах socket.connect(options) включён алгоритм автоматического выбора семейства адресов. Оно представляет собой массив адресов, к которым предпринимались попытки подключения.

Каждый адрес — это строка в формате $IP:$PORT. Если подключение прошло успешно, последний адрес — это адрес, к которому в данный момент подключён сокет.

socket.bufferSize

Добавлено в: v0.3.8Устарело с: v14.6.0
Стабильность: 0 — Устарело: вместо этого используйте writable.writableLength.
  • Тип: <integer>

Это свойство показывает количество символов, буферизованных для записи. Буфер может содержать строки, длина которых после кодирования ещё неизвестна. Поэтому это число является лишь приблизительной оценкой количества байтов в буфере.

Для net.Socket характерно, что socket.write() всегда работает. Это упрощает начало работы. Компьютер не всегда может обрабатывать данные с той же скоростью, с которой они записываются в сокет. Сетевое соединение может оказаться слишком медленным. Node.js помещает данные, записанные в сокет, во внутреннюю очередь и отправляет их по сети, когда это становится возможным.

Из-за такой внутренней буферизации объём памяти может увеличиваться. Пользователям, столкнувшимся с большим или растущим значением bufferSize, следует попытаться ограничить потоки данных в программе с помощью методов socket.pause() и socket.resume().

socket.bytesRead

Добавлено в: v0.5.3
  • Тип: <integer>

Количество полученных байтов.

socket.bytesWritten

Добавлено в: v0.5.3
  • Тип: <integer>

Количество отправленных байтов.

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. Флаг CLI --enable-network-family-autoselection переименован в --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 | dns.V4MAPPED.

v5.11.0

Теперь поддерживается параметр hints.

v0.1.90

Добавлено в: v0.1.90

  • options <Object>
  • connectListener <Function> Общий параметр методов socket.connect(). Будет однократно добавлен в качестве обработчика события 'connect'.
  • Возвращает: <net.Socket> Сам сокет.

Инициирует соединение для заданного сокета. Обычно этот метод не требуется: сокет следует создать и открыть с помощью net.createConnection(). Используйте его только при реализации пользовательского Socket.

Для TCP-соединений доступны следующие options:

  • autoSelectFamily <boolean>: Если задано значение true, включается алгоритм автоматического определения семейства адресов, в общих чертах реализующий раздел 5 документа RFC 8305. Для lookup устанавливается параметр all со значением true, после чего сокет пытается подключиться ко всем полученным адресам IPv6 и IPv4 по очереди, пока соединение не будет установлено. Сначала проверяется первый возвращённый адрес AAAA, затем первый возвращённый адрес A, потом второй адрес AAAA и так далее. Для каждой попытки подключения, кроме последней, отводится время, указанное в параметре autoSelectFamilyAttemptTimeout. После его истечения выполняется попытка подключения к следующему адресу. Игнорируется, если параметр family не равен 0 или задан параметр localAddress. Ошибки подключения не генерируются, если успешно хотя бы одно соединение. Если все попытки подключения завершатся неудачно, будет сгенерировано одно событие 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'.
  • localAddress <string> Локальный адрес, с которого следует подключить сокет.
  • localPort <number> Локальный порт, с которого следует подключить сокет.
  • lookup <Function> Пользовательская функция lookup. По умолчанию: dns.lookup().
  • port <number> Обязательный параметр. Порт, к которому следует подключить сокет.

Для соединений IPC доступны следующие options:

  • path <string> Обязательный параметр. Путь, к которому следует подключить клиент. См. раздел Определение путей для IPC-соединений. Если он указан, описанные выше параметры, специфичные для TCP, игнорируются.
socket.connect(path[, connectListener])
  • path <string> Путь, к которому следует подключить клиент. См. раздел Определение путей для IPC-соединений.
  • connectListener <Function> Общий параметр методов socket.connect(). Будет однократно добавлен в качестве обработчика события 'connect'.
  • Возвращает: <net.Socket> Сам сокет.

Инициирует соединение IPC для указанного сокета.

Псевдоним для socket.connect(options[, connectListener]), вызванного с { path: path } в качестве options.

socket.connect(port[, host][, connectListener])
Добавлено в: v0.1.90
  • port <number> Порт, к которому следует подключить клиент.
  • host <string> Хост, к которому следует подключить клиент.
  • connectListener <Function> Общий параметр методов socket.connect(). Будет однократно добавлен в качестве обработчика события 'connect'.
  • Возвращает: <net.Socket> Сам сокет.

Инициирует TCP-соединение для указанного сокета.

Псевдоним для socket.connect(options[, connectListener]), вызванного с {port: port, host: host} в качестве options.

socket.connecting

Добавлено в: v6.1.0
  • Тип: <boolean>

Если значение равно true, был вызван метод socket.connect(options[, connectListener]), который ещё не завершил работу. Значение останется равным true, пока сокет не подключится; после этого оно изменится на false и будет сгенерировано событие 'connect'. Обратите внимание, что функция обратного вызова socket.connect(options[, connectListener]) является обработчиком события 'connect'.

socket.destroy([error])

Добавлено в: v0.1.90
  • error <Object>
  • Возвращает: <net.Socket>

Гарантирует, что для этого сокета больше не будет выполняться операций ввода-вывода. Уничтожает поток и закрывает соединение.

Дополнительные сведения см. в разделе 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> Используется только в том случае, если данные имеют тип string. По умолчанию: 'utf8'.
  • callback <Function> Необязательная функция обратного вызова, вызываемая после завершения работы с сокетом.
  • Возвращает: <net.Socket> Сам сокет.

Закрывает сокет для передачи данных в одном направлении. То есть отправляет пакет FIN. Сервер всё ещё может отправить некоторые данные.

Дополнительные сведения см. в разделе writable.end().

socket.localAddress

Добавлено в: v0.9.6
  • Тип: <string>

Строковое представление локального IP-адреса, по которому подключается удалённый клиент. Например, если сервер прослушивает '0.0.0.0', а клиент подключается по адресу '192.168.1.1', значение socket.localAddress будет равно '192.168.1.1'.

socket.localPort

Добавлено в: v0.9.6
  • Тип: <integer>

Числовое представление локального порта. Например, 80 или 21.

socket.localFamily

Добавлено в: v18.8.0, v16.18.0
  • Тип: <string>

Строковое представление локального семейства IP-адресов: 'IPv4' или 'IPv6'.

socket.pause()

  • Возвращает: <net.Socket> Сам сокет.

Приостанавливает чтение данных. Это означает, что события 'data' создаваться не будут. Полезно для ограничения скорости загрузки.

socket.pending

Добавлено в: v11.2.0, v10.16.0
  • Тип: <boolean>

Значение равно true, если сокет ещё не подключён: либо потому, что .connect() ещё не был вызван, либо потому, что подключение всё ещё выполняется (см. socket.connecting).

socket.ref()

Добавлено в: v0.9.1
  • Возвращает: <net.Socket> Сам сокет.

Противоположность unref(): вызов ref() для сокета, ранее вызвавшего unref, не позволит программе завершиться, если это единственный оставшийся сокет (поведение по умолчанию). Если для сокета уже был вызван ref, повторный вызов ref не повлияет на результат.

socket.remoteAddress

Добавлено в: v0.5.10
  • Тип: <string>

Строковое представление удалённого IP-адреса. Например, '74.125.127.100' или '2001:4860:a005::68'. Если сокет уничтожен (например, если клиент отключился), значение может быть undefined.

socket.remoteFamily

Добавлено в: v0.11.14
  • Тип: <string>

Строковое представление удалённого семейства IP-адресов: 'IPv4' или 'IPv6'. Если сокет уничтожен (например, если клиент отключился), значение может быть undefined.

socket.remotePort

Добавлено в: v0.5.10
  • Тип: <integer>

Числовое представление удалённого порта. Например, 80 или 21. Если сокет уничтожен (например, если клиент отключился), значение может быть undefined.

socket.resetAndDestroy()

Добавлено в: v18.3.0, v16.17.0
  • Возвращает: <net.Socket>

Закрывает TCP-соединение, отправляя пакет RST, и уничтожает поток. Если TCP-сокет находится в состоянии подключения, он отправит пакет RST и уничтожит этот TCP-сокет после установления соединения. В противном случае будет вызван socket.destroy с ошибкой ERR_SOCKET_CLOSED. Если это не TCP-сокет (например, канал), вызов этого метода немедленно приведёт к ошибке ERR_INVALID_HANDLE_TYPE.

socket.resume()

  • Возвращает: <net.Socket> Сам сокет.

Возобновляет чтение после вызова socket.pause().

socket.setEncoding([encoding])

Добавлено в: v0.1.90
  • encoding <string>
  • Возвращает: <net.Socket> Сам сокет.

Задаёт кодировку сокета как читаемого потока. Дополнительные сведения см. в разделе readable.setEncoding().

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

История
Версия Изменения
v13.12.0, v12.17.0

Добавлены новые значения по умолчанию для параметров сокета TCP_KEEPCNT и TCP_KEEPINTVL.

v0.1.92

Добавлено в: v0.1.92

  • enable <boolean> По умолчанию: false
  • initialDelay <number> По умолчанию: 0
  • Возвращает: <net.Socket> Сам сокет.

Включает или отключает функцию keep-alive и при необходимости задаёт задержку перед отправкой первой проверки keep-alive для неактивного сокета.

Задайте initialDelay (в миллисекундах), чтобы установить задержку между получением последнего пакета данных и первой проверкой keep-alive. Если для initialDelay задано значение 0, значение останется неизменным относительно настройки по умолчанию (или предыдущей настройки).

При включении функции keep-alive задаются следующие параметры сокета:

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

socket.setNoDelay([noDelay])

Добавлено в: v0.1.90
  • noDelay <boolean> По умолчанию: true
  • Возвращает: <net.Socket> Сам сокет.

Включает или отключает алгоритм Нейгла.

При создании TCP-соединения алгоритм Нейгла включён.

Алгоритм Нейгла задерживает отправку данных по сети. Он пытается оптимизировать пропускную способность за счёт увеличения задержки.

Передача true для noDelay или отсутствие аргумента отключает алгоритм Нейгла для сокета. Передача false для noDelay включает алгоритм Нейгла.

socket.setTimeout(timeout[, callback])

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь приводит к ошибке ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

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();
}); copy

Если значение timeout равно 0, существующий тайм-аут бездействия отключается.

Необязательный параметр callback будет добавлен как одноразовый обработчик события 'timeout'.

socket.timeout

Добавлено в: v10.7.0
  • Тип: <number> | <undefined>

Время ожидания сокета в миллисекундах, заданное методом 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> Используется только в том случае, если данные имеют тип string. По умолчанию: utf8.
  • callback <Function>
  • Возвращает: <boolean>

Отправляет данные через сокет. Второй параметр задаёт кодировку, используемую для строки. По умолчанию используется кодировка UTF8.

Возвращает true, если все данные успешно переданы в буфер ядра. Возвращает false, если все данные или их часть поставлены в очередь в памяти пользователя. Событие 'drain' будет создано, когда буфер снова освободится.

Необязательный параметр callback будет выполнен после окончательной записи данных, которая может произойти не сразу.

Дополнительные сведения см. в описании метода write() потока Writable.

socket.readyState

Добавлено в: v0.5.0
  • Тип: <string>

Это свойство представляет состояние соединения в виде строки.

  • Если поток находится в процессе подключения, 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])
  • net.createConnection(path[, connectListener]) для соединений IPC.
  • net.createConnection(port[, host][, connectListener]) для TCP-соединений.

Функция 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():

Модули JavaScript
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');
});
CommonJS
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' }); copy

Ниже приведён пример клиента, использующего параметры port и onread. В этом случае параметр onread будет использоваться только для вызова new net.Socket([options]), а параметр port — для вызова socket.connect(options[, connectListener]).

Модули JavaScript
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));
    },
  },
});
CommonJS
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> При необходимости переопределяет readableHighWaterMark и writableHighWaterMark всех объектов net.Socket. По умолчанию: см. stream.getDefaultHighWaterMark().
    • keepAlive <boolean> Если задано значение true, функция keep-alive включается для сокета сразу после получения нового входящего соединения — так же, как это делается в socket.setKeepAlive(). По умолчанию: false.
    • keepAliveInitialDelay <number> Если задано положительное число, оно определяет задержку перед отправкой первой проверки keep-alive для неактивного сокета. По умолчанию: 0.
    • noDelay <boolean> Если задано значение true, алгоритм Нейгла отключается для сокета сразу после получения нового входящего соединения. По умолчанию: 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 ответный пакет FIN отправляется только после явного вызова socket.end(). До этого соединение закрыто в одном направлении (данные нельзя читать, но можно записывать). Дополнительные сведения см. в описании события 'end' и в RFC 1122 (раздел 4.2.2.13).

Если для pauseOnConnect задано значение true, связанный с каждым входящим соединением сокет будет приостановлен, и данные из его дескриптора считываться не будут. Это позволяет передавать соединения между процессами, не считывая данные исходным процессом. Чтобы начать чтение данных из приостановленного сокета, вызовите socket.resume().

Сервер может быть TCP-сервером или сервером IPC в зависимости от того, что он listen().

Ниже приведён пример TCP-сервера эхо, который принимает соединения на порту 8124:

Модули JavaScript
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');
});
CommonJS
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 copy

Чтобы прослушивать сокет /tmp/echo.sock:

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

Используйте nc для подключения к серверу доменного сокета Unix:

nc -U /tmp/echo.sock copy

net.getDefaultAutoSelectFamily()

Добавлено в: v19.4.0

Возвращает текущее значение по умолчанию параметра autoSelectFamily для socket.connect(options). Начальное значение по умолчанию — true, если не указан параметр командной строки --no-network-family-autoselection.

  • Возвращает: <boolean> Текущее значение по умолчанию параметра autoSelectFamily.

net.setDefaultAutoSelectFamily(value)

Добавлено в: v19.4.0

Задает значение по умолчанию параметра autoSelectFamily для socket.connect(options).

  • value <boolean> Новое значение по умолчанию. Начальное значение по умолчанию — true, если не указан параметр командной строки --no-network-family-autoselection.

net.getDefaultAutoSelectFamilyAttemptTimeout()

Добавлено в: v19.8.0, v18.18.0

Возвращает текущее значение по умолчанию параметра autoSelectFamilyAttemptTimeout для socket.connect(options). Начальное значение по умолчанию — 250 или значение, заданное параметром командной строки --network-family-autoselection-attempt-timeout.

  • Возвращает: <number> Текущее значение по умолчанию параметра autoSelectFamilyAttemptTimeout.

net.setDefaultAutoSelectFamilyAttemptTimeout(value)

Добавлено в: v19.8.0, v18.18.0

Задает значение по умолчанию параметра autoSelectFamilyAttemptTimeout для socket.connect(options).

  • value <number> Новое значение по умолчанию, которое должно быть положительным числом. Если число меньше 10, вместо него используется значение 10. Начальное значение по умолчанию — 250 или значение, заданное параметром командной строки --network-family-autoselection-attempt-timeout.

net.isIP(input)

Добавлено в: v0.3.0
  • input <string>
  • Возвращает: <integer>

Возвращает 6, если input — адрес IPv6. Возвращает 4, если input — адрес IPv4 в точечной десятичной нотации без ведущих нулей. В противном случае возвращает 0.

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

net.isIPv4(input)

Добавлено в: v0.3.0
  • input <string>
  • Возвращает: <boolean>

Возвращает true, если input — адрес IPv4 в точечной десятичной нотации без ведущих нулей. В противном случае возвращает false.

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

net.isIPv6(input)

Добавлено в: v0.3.0
  • input <string>
  • Возвращает: <boolean>

Возвращает true, если input — адрес IPv6. В противном случае возвращает false.

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

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v24.x/docs/api/net.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API