UDP-сокеты (дейтаграммы)
Исходный код: lib/dgram.js
Модуль node:dgram предоставляет реализацию UDP-сокетов для дейтаграмм.
Модули JavaScript
import dgram from 'node:dgram';
const server = dgram.createSocket('udp4');
server.on('error', (err) => {
console.error(`server error:\n${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on('listening', () => {
const address = server.address();
console.log(`server listening ${address.address}:${address.port}`);
});
server.bind(41234);
// Prints: server listening 0.0.0.0:41234CommonJS
const dgram = require('node:dgram');
const server = dgram.createSocket('udp4');
server.on('error', (err) => {
console.error(`server error:\n${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on('listening', () => {
const address = server.address();
console.log(`server listening ${address.address}:${address.port}`);
});
server.bind(41234);
// Prints: server listening 0.0.0.0:41234Класс: dgram.Socket
- Расширяет: <EventEmitter>
Предоставляет функциональность для работы с дейтаграммами.
Новые экземпляры dgram.Socket создаются с помощью dgram.createSocket(). Ключевое слово new не следует использовать для создания экземпляров dgram.Socket.
Событие: 'close'
Событие 'close' возникает после закрытия сокета с помощью close(). После его возникновения на этом сокете больше не будут генерироваться новые события 'message'.
Событие: 'connect'
Событие 'connect' возникает после связывания сокета с удаленным адресом в результате успешного вызова connect().
Событие: 'error'
-
exception<Error>
Событие 'error' возникает при любой ошибке. Функции-обработчику события передается один объект Error.
Событие: 'listening'
Событие 'listening' возникает, когда dgram.Socket становится доступен по адресу и может принимать данные. Это происходит либо явно при вызове socket.bind(), либо неявно при первой отправке данных с помощью socket.send(). Пока dgram.Socket не находится в режиме прослушивания, системные ресурсы не создаются и такие вызовы, как socket.address() и socket.setTTL(), завершатся ошибкой.
Событие: 'message'
Событие 'message' возникает, когда на сокете становится доступна новая дейтаграмма. Функции-обработчику события передаются два аргумента: msg и rinfo.
Если исходный адрес входящего пакета является локальным для канала IPv6, к address добавляется имя интерфейса. Например, в поле адреса пакета, полученного на интерфейсе en0, может быть указано 'fe80::2618:1234:ab11:3b9c%en0', где '%en0' — имя интерфейса, добавленное в качестве идентификатора зоны.
socket.addMembership(multicastAddress[, multicastInterface])
Указывает ядру присоединиться к группе многоадресной рассылки по заданным multicastAddress и multicastInterface, используя параметр сокета IP_ADD_MEMBERSHIP. Если аргумент multicastInterface не указан, операционная система выберет один интерфейс и присоединит его к группе. Чтобы присоединить к группе каждый доступный интерфейс, вызовите addMembership несколько раз — по одному разу для каждого интерфейса.
При вызове для несвязанного сокета этот метод неявно привязывает его к случайному порту, прослушивая все интерфейсы.
При совместном использовании сокета UDP несколькими рабочими процессами cluster функцию socket.addMembership() следует вызвать только один раз, иначе возникнет ошибка EADDRINUSE:
Модули JavaScript
import cluster from 'node:cluster';
import dgram from 'node:dgram';
if (cluster.isPrimary) {
cluster.fork(); // Works ok.
cluster.fork(); // Fails with EADDRINUSE.
} else {
const s = dgram.createSocket('udp4');
s.bind(1234, () => {
s.addMembership('224.0.0.114');
});
}CommonJS
const cluster = require('node:cluster');
const dgram = require('node:dgram');
if (cluster.isPrimary) {
cluster.fork(); // Works ok.
cluster.fork(); // Fails with EADDRINUSE.
} else {
const s = dgram.createSocket('udp4');
s.bind(1234, () => {
s.addMembership('224.0.0.114');
});
}
socket.addSourceSpecificMembership(sourceAddress, groupAddress[, multicastInterface])
Указывает ядру присоединиться к группе многоадресной рассылки с фильтрацией по источнику по заданным sourceAddress и groupAddress, используя параметр сокета IP_ADD_SOURCE_MEMBERSHIP с параметром multicastInterface. Если аргумент multicastInterface не указан, операционная система выберет один интерфейс и присоединит его к группе. Чтобы присоединить к группе каждый доступный интерфейс, вызовите socket.addSourceSpecificMembership() несколько раз — по одному разу для каждого интерфейса.
При вызове для несвязанного сокета этот метод неявно привязывает его к случайному порту, прослушивая все интерфейсы.
socket.address()
- Возвращает: <Object>
Возвращает объект с информацией об адресе сокета. Для сокетов UDP этот объект будет содержать свойства address, family и port.
Если вызвать этот метод для несвязанного сокета, он выбросит EBADF.
socket.bind([port][, address][, callback])
-
port<integer> -
address<string> -
callback<Function> Без параметров. Вызывается после завершения привязки.
Для сокетов UDP включает прослушивание сокетом dgram.Socket сообщений дейтаграмм на заданном port и необязательном address. Если port не указан или равен 0, операционная система попытается привязать сокет к случайному порту. Если address не указан, операционная система попытается прослушивать все адреса. После завершения привязки возникает событие 'listening' и вызывается необязательная функция callback.
Указание одновременно обработчика события 'listening' и передача callback методу socket.bind() не причинит вреда, но и не принесет особой пользы.
Привязанный сокет дейтаграмм не позволяет процессу Node.js завершиться, чтобы принимать сообщения дейтаграмм.
Если привязка завершается неудачей, возникает событие 'error'. В редких случаях (например, при попытке привязать закрытый сокет) может быть выброшено исключение Error.
Пример UDP-сервера, прослушивающего порт 41234:
Модули JavaScript
import dgram from 'node:dgram';
const server = dgram.createSocket('udp4');
server.on('error', (err) => {
console.error(`server error:\n${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on('listening', () => {
const address = server.address();
console.log(`server listening ${address.address}:${address.port}`);
});
server.bind(41234);
// Prints: server listening 0.0.0.0:41234CommonJS
const dgram = require('node:dgram');
const server = dgram.createSocket('udp4');
server.on('error', (err) => {
console.error(`server error:\n${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on('listening', () => {
const address = server.address();
console.log(`server listening ${address.address}:${address.port}`);
});
server.bind(41234);
// Prints: server listening 0.0.0.0:41234
socket.bind(options[, callback])
-
options<Object> Обязательный параметр. Поддерживает следующие свойства: -
callback<Function>
Для сокетов UDP включает прослушивание сокетом dgram.Socket сообщений дейтаграмм на заданном port и необязательном address, переданных в качестве свойств объекта options, который передается первым аргументом. Если port не указан или равен 0, операционная система попытается привязать сокет к случайному порту. Если address не указан, операционная система попытается прослушивать все адреса. После завершения привязки возникает событие 'listening' и вызывается необязательная функция callback.
Объект options может содержать свойство fd. Если задано значение fd, превышающее 0, оно будет использовано для оборачивания существующего сокета с указанным файловым дескриптором. В этом случае свойства port и address будут проигнорированы.
Указание одновременно обработчика события 'listening' и передача callback методу socket.bind() не причинит вреда, но и не принесет особой пользы.
Объект options может содержать дополнительное свойство exclusive, используемое при работе с объектами dgram.Socket в модуле cluster. Если для exclusive задано значение false (по умолчанию), рабочие процессы кластера будут использовать один и тот же базовый дескриптор сокета, что позволит совместно распределять обработку соединений. Если же exclusive равно true, дескриптор не будет общим, и попытка совместного использования порта приведет к ошибке.
Привязанный сокет дейтаграмм не позволяет процессу Node.js завершиться, чтобы принимать сообщения дейтаграмм.
Если привязка завершается неудачей, возникает событие 'error'. В редких случаях (например, при попытке привязать закрытый сокет) может быть выброшено исключение Error.
Ниже показан пример сокета, прослушивающего эксклюзивный порт.
socket.bind({
address: 'localhost',
port: 8000,
exclusive: true,
}); copy
socket.close([callback])
-
callback<Function> Вызывается после закрытия сокета.
Закрывает базовый сокет и прекращает прослушивание данных на нем. Если передана функция обратного вызова, она добавляется в качестве обработчика события 'close'.
socket[Symbol.asyncDispose]()
Вызывает socket.close() и возвращает промис, который выполняется после закрытия сокета.
socket.connect(port[, address][, callback])
-
port<integer> -
address<string> -
callback<Function> Вызывается после установления соединения или при возникновении ошибки.
Связывает dgram.Socket с удаленным адресом и портом. Все сообщения, отправляемые этим дескриптором, автоматически направляются этому получателю. Кроме того, сокет будет принимать сообщения только от этого удаленного узла. Попытка вызвать connect() для уже подключенного сокета приведет к исключению ERR_SOCKET_DGRAM_IS_CONNECTED. Если address не указан, по умолчанию используются '127.0.0.1' (для сокетов udp4) или '::1' (для сокетов udp6). После завершения подключения возникает событие 'connect' и вызывается необязательная функция callback. В случае ошибки вызывается callback, а если она не задана — возникает событие 'error'.
socket.disconnect()
Синхронная функция, которая отсоединяет подключенный dgram.Socket от удаленного адреса. Попытка вызвать disconnect() для несвязанного или уже отключенного сокета приведет к исключению ERR_SOCKET_DGRAM_NOT_CONNECTED.
socket.dropMembership(multicastAddress[, multicastInterface])
Указывает ядру покинуть группу многоадресной рассылки по адресу multicastAddress, используя параметр сокета IP_DROP_MEMBERSHIP. Ядро автоматически вызывает этот метод при закрытии сокета или завершении процесса, поэтому большинству приложений он не понадобится.
Если multicastInterface не указан, операционная система попытается удалить членство на всех действительных интерфейсах.
socket.dropSourceSpecificMembership(sourceAddress, groupAddress[, multicastInterface])
Указывает ядру покинуть группу многоадресной рассылки с фильтрацией по источнику по заданным sourceAddress и groupAddress, используя параметр сокета IP_DROP_SOURCE_MEMBERSHIP. Ядро автоматически вызывает этот метод при закрытии сокета или завершении процесса, поэтому большинству приложений он не понадобится.
Если multicastInterface не указан, операционная система попытается удалить членство на всех действительных интерфейсах.
socket.getRecvBufferSize()
- Возвращает: <number> размер буфера приема сокета
SO_RCVBUFв байтах.
Если вызвать этот метод для несвязанного сокета, он выбросит ERR_SOCKET_BUFFER_SIZE.
socket.getSendBufferSize()
- Возвращает: <number> размер буфера отправки сокета
SO_SNDBUFв байтах.
Если вызвать этот метод для несвязанного сокета, он выбросит ERR_SOCKET_BUFFER_SIZE.
socket.getSendQueueSize()
- Возвращает: <number> количество байтов, поставленных в очередь на отправку.
socket.getSendQueueCount()
- Возвращает: <number> количество запросов на отправку, ожидающих обработки в очереди.
socket.ref()
- Возвращает: <dgram.Socket>
По умолчанию привязка сокета не позволяет процессу Node.js завершиться, пока сокет открыт. Метод socket.unref() позволяет исключить сокет из подсчета ссылок, поддерживающего активность процесса Node.js. Метод socket.ref() снова добавляет сокет в подсчет ссылок и восстанавливает поведение по умолчанию.
Повторный вызов socket.ref() не оказывает дополнительного эффекта.
Метод socket.ref() возвращает ссылку на сокет, что позволяет объединять вызовы в цепочку.
socket.remoteAddress()
- Возвращает: <Object>
Возвращает объект, содержащий address, family и port удаленной конечной точки. Если сокет не подключен, этот метод выбрасывает исключение ERR_SOCKET_DGRAM_NOT_CONNECTED.
socket.send(msg[, offset, length][, port][, address][, callback])
-
msg<Buffer> | <TypedArray> | <DataView> | <string> | <Array> Отправляемое сообщение. -
offset<integer> Смещение в буфере, с которого начинается сообщение. -
length<integer> Количество байтов в сообщении. -
port<integer> Порт назначения. -
address<string> Имя хоста или IP-адрес назначения. -
callback<Function> Вызывается после отправки сообщения.
Отправляет дейтаграмму через сокет. Для сокетов без установления соединения необходимо указать port и address назначения. Подключенные сокеты используют связанную с ними удаленную конечную точку, поэтому аргументы port и address задавать нельзя.
Аргумент msg содержит отправляемое сообщение. В зависимости от его типа поведение может различаться. Если msg — это Buffer, любой TypedArray или DataView, параметры offset и length указывают соответственно смещение в Buffer, с которого начинается сообщение, и количество байтов в сообщении. Если msg — это String, он автоматически преобразуется в Buffer с кодировкой 'utf8'. Для сообщений, содержащих многобайтовые символы, значения offset и length вычисляются с учетом длины в байтах, а не позиции символа. Если msg — это массив, параметры offset и length задавать нельзя.
Аргумент address представляет собой строку. Если значение address является именем хоста, для определения адреса хоста используется DNS. Если address не указан или имеет значение null, по умолчанию используются '127.0.0.1' (для сокетов udp4) или '::1' (для сокетов udp6).
Если сокет ранее не был привязан вызовом bind, ему назначается случайный номер порта и он привязывается к адресу «все интерфейсы» ('0.0.0.0' для сокетов udp4, '::0' для сокетов udp6).
Необязательную функцию callback можно указать для обработки ошибок DNS или определения момента, когда объект buf можно безопасно использовать повторно. Поиск DNS откладывает отправку как минимум на один проход цикла событий Node.js.
Единственный надежный способ узнать, была ли отправлена дейтаграмма, — использовать callback. Если возникает ошибка и задан callback, ошибка передается первым аргументом функции callback. Если callback не задан, ошибка генерируется как событие 'error' объекта socket.
Параметры смещения и длины являются необязательными, но если используется один из них, необходимо задать оба. Они поддерживаются только в том случае, если первый аргумент — это Buffer, TypedArray или DataView.
Если вызвать этот метод для несвязанного сокета, он выбросит ERR_SOCKET_BAD_PORT.
Пример отправки UDP-пакета на порт хоста localhost;
Модули JavaScript
import dgram from 'node:dgram';
import { Buffer } from 'node:buffer';
const message = Buffer.from('Some bytes');
const client = dgram.createSocket('udp4');
client.send(message, 41234, 'localhost', (err) => {
client.close();
});CommonJS
const dgram = require('node:dgram');
const { Buffer } = require('node:buffer');
const message = Buffer.from('Some bytes');
const client = dgram.createSocket('udp4');
client.send(message, 41234, 'localhost', (err) => {
client.close();
});Пример отправки UDP-пакета, состоящего из нескольких буферов, на порт хоста 127.0.0.1;
Модули JavaScript
import dgram from 'node:dgram';
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('Some ');
const buf2 = Buffer.from('bytes');
const client = dgram.createSocket('udp4');
client.send([buf1, buf2], 41234, (err) => {
client.close();
});CommonJS
const dgram = require('node:dgram');
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('Some ');
const buf2 = Buffer.from('bytes');
const client = dgram.createSocket('udp4');
client.send([buf1, buf2], 41234, (err) => {
client.close();
});Отправка нескольких буферов может быть быстрее или медленнее в зависимости от приложения и операционной системы. Чтобы определить оптимальную стратегию для каждого конкретного случая, проведите измерения производительности. Однако, как правило, отправка нескольких буферов выполняется быстрее.
Пример отправки UDP-пакета с помощью сокета, подключенного к порту хоста localhost:
Модули JavaScript
import dgram from 'node:dgram';
import { Buffer } from 'node:buffer';
const message = Buffer.from('Some bytes');
const client = dgram.createSocket('udp4');
client.connect(41234, 'localhost', (err) => {
client.send(message, (err) => {
client.close();
});
});CommonJS
const dgram = require('node:dgram');
const { Buffer } = require('node:buffer');
const message = Buffer.from('Some bytes');
const client = dgram.createSocket('udp4');
client.connect(41234, 'localhost', (err) => {
client.send(message, (err) => {
client.close();
});
});Примечание о размере дейтаграмм UDP
Максимальный размер дейтаграммы IPv4/IPv6 зависит от MTU (максимальной единицы передачи) и размера поля Payload Length.
-
Ширина поля
Payload Lengthсоставляет 16 бит, поэтому обычная полезная нагрузка не может превышать 64 Кбайт, включая заголовок интернета и данные (65 507 байт = 65 535 − 8 байт заголовка UDP − 20 байт заголовка IP). Это обычно справедливо для интерфейсов обратной связи, однако такие длинные сообщения дейтаграмм непрактичны для большинства узлов и сетей. -
MTU— это наибольший размер сообщений дейтаграмм, поддерживаемый данной технологией канального уровня. Для любого канала IPv4 требует минимальное значениеMTUв 68 октетов, а рекомендуемое значениеMTUдля IPv4 составляет 576 (обычно оно рекомендуется в качествеMTUдля приложений коммутируемого доступа) независимо от того, поступают ли данные целиком или фрагментами.Для IPv6 минимальное значение
MTUсоставляет 1280 октетов. Однако обязательный минимальный размер буфера для сборки фрагментов равен 1500 октетам. Значение 68 октетов очень мало, поскольку минимальное значениеMTUбольшинства современных технологий канального уровня, например Ethernet, составляет 1500.
Заранее узнать MTU каждого канала, по которому может пройти пакет, невозможно. Отправка дейтаграммы, размер которой превышает MTU получателя, не сработает: пакет будет молча отброшен, и отправитель не получит уведомления о том, что данные не достигли адресата.
socket.setBroadcast(flag)
-
flag<boolean>
Включает или отключает параметр сокета SO_BROADCAST. Если задано значение true, UDP-пакеты можно отправлять на широковещательный адрес локального интерфейса.
Если вызвать этот метод для несвязанного сокета, он выбросит EBADF.
socket.setMulticastInterface(multicastInterface)
-
multicastInterface<string>
Все упоминания области действия в этом разделе относятся к индексам зоны IPv6, определенным в RFC 4007. В строковом представлении IP-адрес с индексом зоны записывается как 'IP%scope', где областью действия является имя или номер интерфейса.
Устанавливает исходящий интерфейс многоадресной рассылки сокета по умолчанию на выбранный интерфейс или возвращает выбор интерфейса системе. multicastInterface должен быть допустимым строковым представлением IP-адреса из семейства сокета.
Для сокетов IPv4 это должен быть IP-адрес, настроенный для нужного физического интерфейса. Все пакеты, отправляемые через сокет на адрес многоадресной рассылки, будут отправляться через интерфейс, определённый последним успешным вызовом этого метода.
Для сокетов IPv6 multicastInterface должен содержать идентификатор зоны, указывающий интерфейс, как в приведённых ниже примерах. В IPv6 отдельные вызовы send также могут использовать явный идентификатор зоны в адресах, поэтому последний успешный вызов этого метода влияет только на пакеты, отправляемые на адрес многоадресной рассылки без указания явного идентификатора зоны.
Этот метод выбрасывает EBADF, если вызван для несвязанного сокета.
Пример: исходящий интерфейс многоадресной рассылки IPv6
В большинстве систем, где в формате идентификатора зоны используется имя интерфейса:
const socket = dgram.createSocket('udp6');
socket.bind(1234, () => {
socket.setMulticastInterface('::%eth1');
}); copy В Windows, где в формате идентификатора зоны используется номер интерфейса:
const socket = dgram.createSocket('udp6');
socket.bind(1234, () => {
socket.setMulticastInterface('::%2');
}); copy Пример: исходящий интерфейс многоадресной рассылки IPv4
Во всех системах используется IP-адрес узла на нужном физическом интерфейсе:
const socket = dgram.createSocket('udp4');
socket.bind(1234, () => {
socket.setMulticastInterface('10.0.0.2');
}); copy Результаты вызова
Вызов для сокета, который не готов к отправке или уже закрыт, может выбросить ошибку Not running Error.
Если multicastInterface не удаётся преобразовать в IP-адрес, выбрасывается ошибка EINVAL System Error.
Для IPv4, если multicastInterface — допустимый адрес, но он не соответствует ни одному интерфейсу, или если адрес не соответствует семейству, выбрасывается System Error, например EADDRNOTAVAIL или EPROTONOSUP.
Для IPv6 большинство ошибок при указании или отсутствии идентификатора зоны приводят к тому, что сокет продолжает использовать (или возвращается к) выбору интерфейса по умолчанию, выполняемому системой.
Адрес ANY семейства адресов сокета (IPv4 '0.0.0.0' или IPv6 '::') можно использовать, чтобы передать системе управление исходящим интерфейсом сокета по умолчанию для будущих пакетов многоадресной рассылки.
socket.setMulticastLoopback(flag)
-
flag<boolean>
Устанавливает или сбрасывает параметр сокета IP_MULTICAST_LOOP. Если он установлен в true, пакеты многоадресной рассылки также будут приниматься на локальном интерфейсе.
Этот метод выбрасывает EBADF, если вызван для несвязанного сокета.
socket.setMulticastTTL(ttl)
-
ttl<integer>
Устанавливает параметр сокета IP_MULTICAST_TTL. Хотя TTL обычно расшифровывается как «Time to Live» («время жизни»), в данном контексте он задаёт количество переходов между IP-узлами, которое может пройти пакет, в частности для трафика многоадресной рассылки. Каждый маршрутизатор или шлюз, пересылающий пакет, уменьшает значение TTL. Если маршрутизатор уменьшит TTL до 0, пакет не будет переслан.
Аргумент ttl может принимать значения от 0 до 255. В большинстве систем значение по умолчанию — 1.
Этот метод выбрасывает EBADF, если вызван для несвязанного сокета.
socket.setRecvBufferSize(size)
-
size<integer>
Устанавливает параметр сокета SO_RCVBUF. Задаёт максимальный размер буфера приёма сокета в байтах.
Этот метод выбрасывает ERR_SOCKET_BUFFER_SIZE, если вызван для несвязанного сокета.
socket.setSendBufferSize(size)
-
size<integer>
Устанавливает параметр сокета SO_SNDBUF. Задаёт максимальный размер буфера отправки сокета в байтах.
Этот метод выбрасывает ERR_SOCKET_BUFFER_SIZE, если вызван для несвязанного сокета.
socket.setTTL(ttl)
-
ttl<integer>
Устанавливает параметр сокета IP_TTL. Хотя TTL обычно расшифровывается как «Time to Live» («время жизни»), в данном контексте он задаёт количество переходов между IP-узлами, которое может пройти пакет. Каждый маршрутизатор или шлюз, пересылающий пакет, уменьшает значение TTL. Если маршрутизатор уменьшит TTL до 0, пакет не будет переслан. Изменение значений TTL обычно выполняется для сетевых проверок или при многоадресной рассылке.
Аргумент ttl может принимать значения от 1 до 255. В большинстве систем значение по умолчанию — 64.
Этот метод выбрасывает EBADF, если вызван для несвязанного сокета.
socket.unref()
- Возвращает: <dgram.Socket>
По умолчанию привязка сокета не позволяет процессу Node.js завершиться, пока сокет открыт. Метод socket.unref() можно использовать, чтобы исключить сокет из подсчёта ссылок, поддерживающего активность процесса Node.js, и позволить процессу завершиться, даже если сокет всё ещё ожидает подключений.
Повторные вызовы socket.unref() не дают дополнительного эффекта.
Метод socket.unref() возвращает ссылку на сокет, поэтому вызовы можно объединять в цепочки.
Функции модуля node:dgram
dgram.createSocket(options[, callback])
-
options<Object> Доступные параметры:-
type<string> Семейство сокета. Должно быть'udp4'или'udp6'. Обязательный параметр. -
reuseAddr<boolean> Если установлено значениеtrue,socket.bind()будет повторно использовать адрес, даже если другой процесс уже привязал к нему сокет. По умолчанию:false. -
ipv6Only<boolean> Установка дляipv6Onlyзначенияtrueотключит поддержку двух стеков, то есть привязка к адресу::не приведёт к привязке0.0.0.0. По умолчанию:false. -
recvBufferSize<number> Устанавливает значение сокетаSO_RCVBUF. -
sendBufferSize<number> Устанавливает значение сокетаSO_SNDBUF. -
lookup<Function> Пользовательская функция поиска. По умолчанию:dns.lookup(). -
signal<AbortSignal> AbortSignal, который можно использовать для закрытия сокета.
-
-
callback<Function> Назначается обработчиком событий'message'. Необязательный параметр. - Возвращает: <dgram.Socket>
Создаёт объект dgram.Socket. После создания сокета вызов socket.bind() укажет сокету начать прослушивание сообщений дейтаграмм. Если address и port не переданы в socket.bind(), метод привяжет сокет к адресу «все интерфейсы» на случайном порту (правильным образом как для сокетов udp4, так и для udp6). Привязанные адрес и порт можно получить с помощью socket.address().address и socket.address().port.
Если параметр signal включён, вызов .abort() для соответствующего AbortController аналогичен вызову .close() для сокета:
const controller = new AbortController();
const { signal } = controller;
const server = dgram.createSocket({ type: 'udp4', signal });
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
// Later, when you want to close the server.
controller.abort(); copy
dgram.createSocket(type[, callback])
-
type<string> Либо'udp4', либо'udp6'. -
callback<Function> Назначается обработчиком событий'message'. - Возвращает: <dgram.Socket>
Создаёт объект dgram.Socket указанного типа type.
После создания сокета вызов socket.bind() укажет сокету начать прослушивание сообщений дейтаграмм. Если address и port не переданы в socket.bind(), метод привяжет сокет к адресу «все интерфейсы» на случайном порту (правильным образом как для сокетов udp4, так и для udp6). Привязанные адрес и порт можно получить с помощью socket.address().address и socket.address().port.
© 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-v20.x/docs/api/dgram.html