@@ -49,6 +49,14 @@ added: v0.1.99
4949The ` 'close' ` event is emitted after a socket is closed with [ ` close() ` ] [ ] .
5050Once triggered, no new ` 'message' ` events will be emitted on this socket.
5151
52+ ### Event: 'connect'
53+ <!-- YAML
54+ added: REPLACEME
55+ -->
56+
57+ The ` 'connect' ` event is emitted after a socket is associated to a remote
58+ address as a result of a successful [ ` connect() ` ] [ ] call.
59+
5260### Event: 'error'
5361<!-- YAML
5462added: v0.1.99
@@ -237,6 +245,34 @@ added: v0.1.99
237245Close the underlying socket and stop listening for data on it. If a callback is
238246provided, it is added as a listener for the [ ` 'close' ` ] [ ] event.
239247
248+ ### socket.connect(port[ , address] [ , callback ] )
249+ <!-- YAML
250+ added: REPLACEME
251+ -->
252+
253+ * ` port ` {integer}
254+ * ` address ` {string}
255+ * ` callback ` {Function} Called when the connection is completed or on error.
256+
257+ Associates the ` dgram.Socket ` to a remote address and port. Every
258+ message sent by this handle is automatically sent to that destination. Also,
259+ the socket will only receive messages from that remote peer.
260+ Trying to call ` connect() ` on an already connected socket will result
261+ in an [ ` ERR_SOCKET_DGRAM_IS_CONNECTED ` ] [ ] exception. If ` address ` is not
262+ provided, ` '127.0.0.1' ` (for ` udp4 ` sockets) or ` '::1' ` (for ` udp6 ` sockets)
263+ will be used by default. Once the connection is complete, a ` 'connect' ` event
264+ is emitted and the optional ` callback ` function is called. In case of failure,
265+ the ` callback ` is called or, failing this, an ` 'error' ` event is emitted.
266+
267+ ### socket.disconnect()
268+ <!-- YAML
269+ added: REPLACEME
270+ -->
271+
272+ A synchronous function that disassociates a connected ` dgram.Socket ` from
273+ its remote address. Trying to call ` disconnect() ` on an already disconnected
274+ socket will result in an [ ` ERR_SOCKET_DGRAM_NOT_CONNECTED ` ] [ ] exception.
275+
240276### socket.dropMembership(multicastAddress[ , multicastInterface] )
241277<!-- YAML
242278added: v0.6.9
@@ -283,7 +319,18 @@ Calling `socket.ref()` multiples times will have no additional effect.
283319The ` socket.ref() ` method returns a reference to the socket so calls can be
284320chained.
285321
286- ### socket.send(msg[ , offset, length] , port[ , address] [ , callback ] )
322+ ### socket.remoteAddress()
323+ <!-- YAML
324+ added: REPLACEME
325+ -->
326+
327+ * Returns: {Object}
328+
329+ Returns an object containing the ` address ` , ` family ` , and ` port ` of the remote
330+ endpoint. It throws an [ ` ERR_SOCKET_DGRAM_NOT_CONNECTED ` ] [ ] exception if the
331+ socket is not connected.
332+
333+ ### socket.send(msg[ , offset, length] [ , port ] [ , address] [ , callback ] )
287334<!-- YAML
288335added: v0.1.99
289336changes:
@@ -301,6 +348,9 @@ changes:
301348 pr-url: https://github.com/nodejs/node/pull/4374
302349 description: The `msg` parameter can be an array now. Also, the `offset`
303350 and `length` parameters are optional now.
351+ - version: REPLACEME
352+ pr-url: https://github.com/nodejs/node/pull/26871
353+ description: Added support for sending data on connected sockets.
304354-->
305355
306356* ` msg ` {Buffer|Uint8Array|string|Array} Message to be sent.
@@ -310,8 +360,10 @@ changes:
310360* ` address ` {string} Destination hostname or IP address.
311361* ` callback ` {Function} Called when the message has been sent.
312362
313- Broadcasts a datagram on the socket. The destination ` port ` and ` address ` must
314- be specified.
363+ Broadcasts a datagram on the socket.
364+ For connectionless sockets, the destination ` port ` and ` address ` must be
365+ specified. Connected sockets, on the other hand, will use their associated
366+ remote endpoint, so the ` port ` and ` address ` arguments must not be set.
315367
316368The ` msg ` argument contains the message to be sent.
317369Depending on its type, different behavior can apply. If ` msg ` is a ` Buffer `
@@ -375,6 +427,20 @@ application and operating system. It is important to run benchmarks to
375427determine the optimal strategy on a case-by-case basis. Generally speaking,
376428however, sending multiple buffers is faster.
377429
430+ Example of sending a UDP packet using a socket connected to a port on
431+ ` localhost ` :
432+
433+ ``` js
434+ const dgram = require (' dgram' );
435+ const message = Buffer .from (' Some bytes' );
436+ const client = dgram .createSocket (' udp4' );
437+ client .connect (41234 , ' localhost' , (err ) => {
438+ client .send (message, (err ) => {
439+ client .close ();
440+ });
441+ });
442+ ```
443+
378444** A Note about UDP datagram size**
379445
380446The maximum size of an ` IPv4/v6 ` datagram depends on the ` MTU `
@@ -651,10 +717,13 @@ and `udp6` sockets). The bound address and port can be retrieved using
651717
652718[ `'close'` ] : #dgram_event_close
653719[ `Error` ] : errors.html#errors_class_error
720+ [ `ERR_SOCKET_DGRAM_IS_CONNECTED` ] : errors.html#errors_err_socket_dgram_is_connected
721+ [ `ERR_SOCKET_DGRAM_NOT_CONNECTED` ] : errors.html#errors_err_socket_dgram_not_connected
654722[ `EventEmitter` ] : events.html
655723[ `System Error` ] : errors.html#errors_class_systemerror
656724[ `close()` ] : #dgram_socket_close_callback
657725[ `cluster` ] : cluster.html
726+ [ `connect()` ] : #dgram_socket_connect_port_address_callback
658727[ `dgram.Socket#bind()` ] : #dgram_socket_bind_options_callback
659728[ `dgram.createSocket()` ] : #dgram_dgram_createsocket_options_callback
660729[ `dns.lookup()` ] : dns.html#dns_dns_lookup_hostname_options_callback
0 commit comments