@fkn/lib/dgram
Classes
Section titled “Classes”Socket
Section titled “Socket”Extends
Section titled “Extends”EventEmitter
Implements
Section titled “Implements”Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new Socket(options): Socket;Parameters
Section titled “Parameters”options
Section titled “options”SocketOptions & EventEmitterOptions & object
Returns
Section titled “Returns”Overrides
Section titled “Overrides”EventEmitter.constructorMethods
Section titled “Methods”[asyncDispose]()
Section titled “[asyncDispose]()”asyncDispose: Promise<void>;Returns
Section titled “Returns”Promise<void>
Implementation of
Section titled “Implementation of”DgramSocket.[asyncDispose]addMembership()
Section titled “addMembership()”addMembership(multicastAddress, multicastInterface?): void;Tells the kernel to join a multicast group at the given multicastAddress and multicastInterface using the IP_ADD_MEMBERSHIP socket option. If the multicastInterface argument is not
specified, the operating system will choose
one interface and will add membership to it. To add membership to every
available interface, call addMembership multiple times, once per interface.
When called on an unbound socket, this method will implicitly bind to a random port, listening on all interfaces.
When sharing a UDP socket across multiple cluster workers, thesocket.addMembership() function must be called only once or anEADDRINUSE error will occur:
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'); });}Parameters
Section titled “Parameters”multicastAddress
Section titled “multicastAddress”string
multicastInterface?
Section titled “multicastInterface?”string
Returns
Section titled “Returns”void
v0.6.9
Implementation of
Section titled “Implementation of”DgramSocket.addMembershipaddress()
Section titled “address()”address(): AddressInfo;Returns an object containing the address information for a socket.
For UDP sockets, this object will contain address, family, and port properties.
This method throws EBADF if called on an unbound socket.
Returns
Section titled “Returns”AddressInfo
v0.1.99
Implementation of
Section titled “Implementation of”DgramSocket.addressaddSourceSpecificMembership()
Section titled “addSourceSpecificMembership()”addSourceSpecificMembership( sourceAddress, groupAddress, multicastInterface?): void;Not implemented by the browser transport. This method currently does nothing.
Parameters
Section titled “Parameters”sourceAddress
Section titled “sourceAddress”string
groupAddress
Section titled “groupAddress”string
multicastInterface?
Section titled “multicastInterface?”string
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.addSourceSpecificMembershipbind()
Section titled “bind()”Call Signature
Section titled “Call Signature”bind( port?, address?, callback?): this;For UDP sockets, causes the dgram.Socket to listen for datagram
messages on a named port and optional address. If port is not
specified or is 0, the operating system will attempt to bind to a
random port. If address is not specified, the operating system will
attempt to listen on all addresses. Once binding is complete, a 'listening' event is emitted and the optional callback function is
called.
Specifying both a 'listening' event listener and passing a callback to the socket.bind() method is not harmful but not very
useful.
A bound datagram socket keeps the Node.js process running to receive datagram messages.
If binding fails, an 'error' event is generated. In rare case (e.g.
attempting to bind with a closed socket), an Error may be thrown.
Example of a UDP server listening on port 41234:
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:41234Parameters
Section titled “Parameters”number
address?
Section titled “address?”string
callback?
Section titled “callback?”() => void
with no parameters. Called when binding is complete.
Returns
Section titled “Returns”this
v0.1.99
Implementation of
Section titled “Implementation of”DgramSocket.bindCall Signature
Section titled “Call Signature”bind(port?, callback?): this;Parameters
Section titled “Parameters”number
callback?
Section titled “callback?”() => void
Returns
Section titled “Returns”this
Implementation of
Section titled “Implementation of”DgramSocket.bindCall Signature
Section titled “Call Signature”bind(callback?): this;Parameters
Section titled “Parameters”callback?
Section titled “callback?”() => void
Returns
Section titled “Returns”this
Implementation of
Section titled “Implementation of”DgramSocket.bindCall Signature
Section titled “Call Signature”bind(options, callback?): this;Parameters
Section titled “Parameters”options
Section titled “options”BindOptions
callback?
Section titled “callback?”() => void
Returns
Section titled “Returns”this
Implementation of
Section titled “Implementation of”DgramSocket.bindclose()
Section titled “close()”close(callback?): this;Close the underlying socket and stop listening for data on it. If a callback is
provided, it is added as a listener for the 'close' event.
Parameters
Section titled “Parameters”callback?
Section titled “callback?”() => void
Called when the socket has been closed.
Returns
Section titled “Returns”this
v0.1.99
Implementation of
Section titled “Implementation of”DgramSocket.closeconnect()
Section titled “connect()”Call Signature
Section titled “Call Signature”connect( port, address?, callback?): void;Associates the dgram.Socket to a remote address and port. Every
message sent by this handle is automatically sent to that destination. Also,
the socket will only receive messages from that remote peer.
Trying to call connect() on an already connected socket will result
in an ERR_SOCKET_DGRAM_IS_CONNECTED exception. If address is not
provided, '127.0.0.1' (for udp4 sockets) or '::1' (for udp6 sockets)
will be used by default. Once the connection is complete, a 'connect' event
is emitted and the optional callback function is called. In case of failure,
the callback is called or, failing this, an 'error' event is emitted.
Parameters
Section titled “Parameters”number
address?
Section titled “address?”string
callback?
Section titled “callback?”() => void
Called when the connection is completed or on error.
Returns
Section titled “Returns”void
v12.0.0
Implementation of
Section titled “Implementation of”DgramSocket.connectCall Signature
Section titled “Call Signature”connect(port, callback): void;Parameters
Section titled “Parameters”number
callback
Section titled “callback”() => void
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.connectdisconnect()
Section titled “disconnect()”disconnect(): void;A synchronous function that disassociates a connected dgram.Socket from
its remote address. Trying to call disconnect() on an unbound or already
disconnected socket will result in an ERR_SOCKET_DGRAM_NOT_CONNECTED exception.
Returns
Section titled “Returns”void
v12.0.0
Implementation of
Section titled “Implementation of”DgramSocket.disconnectdropMembership()
Section titled “dropMembership()”dropMembership(multicastAddress, multicastInterface?): void;Instructs the kernel to leave a multicast group at multicastAddress using the IP_DROP_MEMBERSHIP socket option. This method is automatically called by the
kernel when the socket is closed or the process terminates, so most apps will
never have reason to call this.
If multicastInterface is not specified, the operating system will attempt to
drop membership on all valid interfaces.
Parameters
Section titled “Parameters”multicastAddress
Section titled “multicastAddress”string
multicastInterface?
Section titled “multicastInterface?”string
Returns
Section titled “Returns”void
v0.6.9
Implementation of
Section titled “Implementation of”DgramSocket.dropMembershipdropSourceSpecificMembership()
Section titled “dropSourceSpecificMembership()”dropSourceSpecificMembership( sourceAddress, groupAddress, multicastInterface?): void;Not implemented by the browser transport. This method currently does nothing.
Parameters
Section titled “Parameters”sourceAddress
Section titled “sourceAddress”string
groupAddress
Section titled “groupAddress”string
multicastInterface?
Section titled “multicastInterface?”string
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.dropSourceSpecificMembershipgetRecvBufferSize()
Section titled “getRecvBufferSize()”getRecvBufferSize(): number;This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.
Returns
Section titled “Returns”number
the SO_RCVBUF socket receive buffer size in bytes.
v8.7.0
Implementation of
Section titled “Implementation of”DgramSocket.getRecvBufferSizegetSendBufferSize()
Section titled “getSendBufferSize()”getSendBufferSize(): number;This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.
Returns
Section titled “Returns”number
the SO_SNDBUF socket send buffer size in bytes.
v8.7.0
Implementation of
Section titled “Implementation of”DgramSocket.getSendBufferSizegetSendQueueCount()
Section titled “getSendQueueCount()”getSendQueueCount(): number;Queue measurements are not exposed by the browser transport. Always returns 0.
Returns
Section titled “Returns”number
Implementation of
Section titled “Implementation of”DgramSocket.getSendQueueCountgetSendQueueSize()
Section titled “getSendQueueSize()”getSendQueueSize(): number;Queue measurements are not exposed by the browser transport. Always returns 0.
Returns
Section titled “Returns”number
Implementation of
Section titled “Implementation of”DgramSocket.getSendQueueSizeref(): this;No-op in a browser, which has no Node process-liveness handle.
Returns
Section titled “Returns”this
Implementation of
Section titled “Implementation of”DgramSocket.refremoteAddress()
Section titled “remoteAddress()”remoteAddress(): AddressInfo;Returns an object containing the address, family, and port of the remote
endpoint. This method throws an ERR_SOCKET_DGRAM_NOT_CONNECTED exception
if the socket is not connected.
Returns
Section titled “Returns”AddressInfo
v12.0.0
Implementation of
Section titled “Implementation of”DgramSocket.remoteAddresssend()
Section titled “send()”Call Signature
Section titled “Call Signature”send( msg, port?, address?, callback?): void;Broadcasts a datagram on the socket.
For connectionless sockets, the destination port and address must be
specified. Connected sockets, on the other hand, will use their associated
remote endpoint, so the port and address arguments must not be set.
The msg argument contains the message to be sent.
Depending on its type, different behavior can apply. If msg is a Buffer,
any TypedArray or a DataView,
the offset and length specify the offset within the Buffer where the
message begins and the number of bytes in the message, respectively.
If msg is a String, then it is automatically converted to a Buffer with 'utf8' encoding. With messages that
contain multi-byte characters, offset and length will be calculated with
respect to byte length and not the character position.
If msg is an array, offset and length must not be specified.
The address argument is a string. If the value of address is a host name,
DNS will be used to resolve the address of the host. If address is not
provided or otherwise nullish, '127.0.0.1' (for udp4 sockets) or '::1' (for udp6 sockets) will be used by default.
If the socket has not been previously bound with a call to bind, the socket
is assigned a random port number and is bound to the “all interfaces” address
('0.0.0.0' for udp4 sockets, '::0' for udp6 sockets.)
An optional callback function may be specified to as a way of reporting
DNS errors or for determining when it is safe to reuse the buf object.
DNS lookups delay the time to send for at least one tick of the
Node.js event loop.
The only way to know for sure that the datagram has been sent is by using a callback. If an error occurs and a callback is given, the error will be
passed as the first argument to the callback. If a callback is not given,
the error is emitted as an 'error' event on the socket object.
Offset and length are optional but both must be set if either are used.
They are supported only when the first argument is a Buffer, a TypedArray,
or a DataView.
This method throws ERR_SOCKET_BAD_PORT if called on an unbound socket.
Example of sending a UDP packet to a port on localhost;
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();});Example of sending a UDP packet composed of multiple buffers to a port on127.0.0.1;
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();});Sending multiple buffers might be faster or slower depending on the application and operating system. Run benchmarks to determine the optimal strategy on a case-by-case basis. Generally speaking, however, sending multiple buffers is faster.
Example of sending a UDP packet using a socket connected to a port on localhost:
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(); });});Parameters
Section titled “Parameters”string | readonly any[] | Uint8Array<ArrayBufferLike>
Message to be sent.
number
Destination port.
address?
Section titled “address?”string
Destination host name or IP address.
callback?
Section titled “callback?”(error, bytes) => void
Called when the message has been sent.
Returns
Section titled “Returns”void
v0.1.99
Implementation of
Section titled “Implementation of”DgramSocket.sendCall Signature
Section titled “Call Signature”send( msg, port?, callback?): void;Parameters
Section titled “Parameters”string | readonly any[] | Uint8Array<ArrayBufferLike>
number
callback?
Section titled “callback?”(error, bytes) => void
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.sendCall Signature
Section titled “Call Signature”send(msg, callback?): void;Parameters
Section titled “Parameters”string | readonly any[] | Uint8Array<ArrayBufferLike>
callback?
Section titled “callback?”(error, bytes) => void
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.sendCall Signature
Section titled “Call Signature”send( msg, offset, length, port?, address?, callback?): void;Parameters
Section titled “Parameters”string | Uint8Array<ArrayBufferLike>
offset
Section titled “offset”number
length
Section titled “length”number
number
address?
Section titled “address?”string
callback?
Section titled “callback?”(error, bytes) => void
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.sendCall Signature
Section titled “Call Signature”send( msg, offset, length, port?, callback?): void;Parameters
Section titled “Parameters”string | Uint8Array<ArrayBufferLike>
offset
Section titled “offset”number
length
Section titled “length”number
number
callback?
Section titled “callback?”(error, bytes) => void
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.sendCall Signature
Section titled “Call Signature”send( msg, offset, length, callback?): void;Parameters
Section titled “Parameters”string | Uint8Array<ArrayBufferLike>
offset
Section titled “offset”number
length
Section titled “length”number
callback?
Section titled “callback?”(error, bytes) => void
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.sendCall Signature
Section titled “Call Signature”send( msg, offset?, length?, port?, address?, callback?): void;Parameters
Section titled “Parameters”unknown
offset?
Section titled “offset?”unknown
length?
Section titled “length?”unknown
unknown
address?
Section titled “address?”unknown
callback?
Section titled “callback?”unknown
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.sendsetBroadcast()
Section titled “setBroadcast()”setBroadcast(flag): void;Sets or clears the SO_BROADCAST socket option. When set to true, UDP
packets may be sent to a local interface’s broadcast address.
This method throws EBADF if called on an unbound socket.
Parameters
Section titled “Parameters”boolean
Returns
Section titled “Returns”void
v0.6.9
Implementation of
Section titled “Implementation of”DgramSocket.setBroadcastsetMulticastInterface()
Section titled “setMulticastInterface()”setMulticastInterface(multicastInterface): void;No-op. The browser transport does not expose an interface index or address.
Parameters
Section titled “Parameters”multicastInterface
Section titled “multicastInterface”string
Returns
Section titled “Returns”void
Implementation of
Section titled “Implementation of”DgramSocket.setMulticastInterfacesetMulticastLoopback()
Section titled “setMulticastLoopback()”setMulticastLoopback(flag): boolean;Sets or clears the IP_MULTICAST_LOOP socket option. When set to true,
multicast packets will also be received on the local interface.
This method throws EBADF if called on an unbound socket.
Parameters
Section titled “Parameters”boolean
Returns
Section titled “Returns”boolean
v0.3.8
Implementation of
Section titled “Implementation of”DgramSocket.setMulticastLoopbacksetMulticastTTL()
Section titled “setMulticastTTL()”setMulticastTTL(ttl): number;Sets the IP_MULTICAST_TTL socket option. While TTL generally stands for
“Time to Live”, in this context it specifies the number of IP hops that a
packet is allowed to travel through, specifically for multicast traffic. Each
router or gateway that forwards a packet decrements the TTL. If the TTL is
decremented to 0 by a router, it will not be forwarded.
The ttl argument may be between 0 and 255. The default on most systems is 1.
This method throws EBADF if called on an unbound socket.
Parameters
Section titled “Parameters”number
Returns
Section titled “Returns”number
v0.3.8
Implementation of
Section titled “Implementation of”DgramSocket.setMulticastTTLsetRecvBufferSize()
Section titled “setRecvBufferSize()”setRecvBufferSize(size): void;Sets the SO_RCVBUF socket option. Sets the maximum socket receive buffer
in bytes.
This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.
Parameters
Section titled “Parameters”number
Returns
Section titled “Returns”void
v8.7.0
Implementation of
Section titled “Implementation of”DgramSocket.setRecvBufferSizesetSendBufferSize()
Section titled “setSendBufferSize()”setSendBufferSize(size): void;Sets the SO_SNDBUF socket option. Sets the maximum socket send buffer
in bytes.
This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.
Parameters
Section titled “Parameters”number
Returns
Section titled “Returns”void
v8.7.0
Implementation of
Section titled “Implementation of”DgramSocket.setSendBufferSizesetTTL()
Section titled “setTTL()”setTTL(ttl): number;Sets the IP_TTL socket option. While TTL generally stands for “Time to Live”,
in this context it specifies the number of IP hops that a packet is allowed to
travel through. Each router or gateway that forwards a packet decrements the
TTL. If the TTL is decremented to 0 by a router, it will not be forwarded.
Changing TTL values is typically done for network probes or when multicasting.
The ttl argument may be between 1 and 255. The default on most systems
is 64.
This method throws EBADF if called on an unbound socket.
Parameters
Section titled “Parameters”number
Returns
Section titled “Returns”number
v0.1.101
Implementation of
Section titled “Implementation of”DgramSocket.setTTLunref()
Section titled “unref()”unref(): this;No-op in a browser, which has no Node process-liveness handle.
Returns
Section titled “Returns”this
Implementation of
Section titled “Implementation of”DgramSocket.unrefVariables
Section titled “Variables”default
Section titled “default”default: object;Type Declaration
Section titled “Type Declaration”createSocket
Section titled “createSocket”createSocket: (options, callback?) => Socket;Parameters
Section titled “Parameters”options
Section titled “options”SocketOptions | SocketType
callback?
Section titled “callback?”(msg, rinfo) => void
Returns
Section titled “Returns”Socket
Section titled “Socket”Socket: typeof Socket;Functions
Section titled “Functions”createSocket()
Section titled “createSocket()”function createSocket(options, callback?): Socket;Parameters
Section titled “Parameters”options
Section titled “options”SocketOptions | SocketType
callback?
Section titled “callback?”(msg, rinfo) => void