Spec-Zone.ru › Node.js 22 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-соединений

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

В Unix локальный домен также известен как домен Unix. Путь представляет собой имя файла в файловой системе. Его длина ограничена зависящим от ОС значением sizeof(sockaddr_un.sun_path) - 1. Типичные значения — 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)

Добавлено в: 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)

Добавлено в: 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]()

Добавлено в: v20.5.0, v18.18.0
Стабильность: 1 — экспериментальный

Вызывает 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])
История
Версия Изменения
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 отключает поддержку dual-stack, то есть привязка к хосту :: не приведёт к привязке 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

Добавлено в: 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.
    • fd <number> Если указано, оборачивает существующий сокет с заданным файловым дескриптором; в противном случае создаётся новый сокет.
    • 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().

Данные будут потеряны, если в момент испускания события 'data' объектом Socket не будет зарегистрирован обработчик.

Событие: '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. Для параметра all, передаваемого в lookup, задаётся значение 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'.
  • keepAlive <boolean> Если задано значение true, сразу после установления соединения для сокета включается функция keep-alive, аналогично тому, как это делается в socket.setKeepAlive(). По умолчанию: false.
  • keepAliveInitialDelay <number> Если задано положительное число, оно задаёт начальную задержку перед отправкой первой keepalive-пробы для бездействующего сокета. По умолчанию: 0.
  • localAddress <string> Локальный адрес, с которого сокет должен подключиться.
  • localPort <number> Локальный порт, с которого сокет должен подключиться.
  • lookup <Function> Пользовательская функция lookup. По умолчанию: dns.lookup().
  • noDelay <boolean> Если задано значение true, сразу после установления соединения для сокета отключается алгоритм Нейгла. По умолчанию: 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 для заданного сокета.

Псевдоним для 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 будет отправлен, а сокет уничтожен после установления соединения. В противном случае будет вызван 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 и, при необходимости, задаёт начальную задержку перед отправкой первого keepalive-зонда для простаивающего сокета.

Задайте initialDelay (в миллисекундах), чтобы установить задержку между получением последнего пакета данных и отправкой первого keepalive-зонда. Если для 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> Если задано положительное число, оно определяет начальную задержку перед отправкой первого keepalive-зонда для простаивающего сокета. По умолчанию: 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-v22.x/docs/api/net.html

Spec-Zone.ru

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