629e76f2e2a0de4302cf59f810636e8538f22e0db94726729e88e112e451983455047733d10f71f6fed5834346d57cb0bbaf6fa09f28227e6fb8bd4770c929 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. /**
  2. * The `node:dgram` module provides an implementation of UDP datagram sockets.
  3. *
  4. * ```js
  5. * import dgram from 'node:dgram';
  6. *
  7. * const server = dgram.createSocket('udp4');
  8. *
  9. * server.on('error', (err) => {
  10. * console.error(`server error:\n${err.stack}`);
  11. * server.close();
  12. * });
  13. *
  14. * server.on('message', (msg, rinfo) => {
  15. * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
  16. * });
  17. *
  18. * server.on('listening', () => {
  19. * const address = server.address();
  20. * console.log(`server listening ${address.address}:${address.port}`);
  21. * });
  22. *
  23. * server.bind(41234);
  24. * // Prints: server listening 0.0.0.0:41234
  25. * ```
  26. * @see [source](https://github.com/nodejs/node/blob/v22.x/lib/dgram.js)
  27. */
  28. declare module "dgram" {
  29. import { AddressInfo, BlockList } from "node:net";
  30. import * as dns from "node:dns";
  31. import { Abortable, EventEmitter } from "node:events";
  32. interface RemoteInfo {
  33. address: string;
  34. family: "IPv4" | "IPv6";
  35. port: number;
  36. size: number;
  37. }
  38. interface BindOptions {
  39. port?: number | undefined;
  40. address?: string | undefined;
  41. exclusive?: boolean | undefined;
  42. fd?: number | undefined;
  43. }
  44. type SocketType = "udp4" | "udp6";
  45. interface SocketOptions extends Abortable {
  46. type: SocketType;
  47. reuseAddr?: boolean | undefined;
  48. reusePort?: boolean | undefined;
  49. /**
  50. * @default false
  51. */
  52. ipv6Only?: boolean | undefined;
  53. recvBufferSize?: number | undefined;
  54. sendBufferSize?: number | undefined;
  55. lookup?:
  56. | ((
  57. hostname: string,
  58. options: dns.LookupOneOptions,
  59. callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void,
  60. ) => void)
  61. | undefined;
  62. receiveBlockList?: BlockList | undefined;
  63. sendBlockList?: BlockList | undefined;
  64. }
  65. /**
  66. * Creates a `dgram.Socket` object. Once the socket is created, calling `socket.bind()` will instruct the socket to begin listening for datagram
  67. * messages. When `address` and `port` are not passed to `socket.bind()` the
  68. * method will bind the socket to the "all interfaces" address on a random port
  69. * (it does the right thing for both `udp4` and `udp6` sockets). The bound address
  70. * and port can be retrieved using `socket.address().address` and `socket.address().port`.
  71. *
  72. * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.close()` on the socket:
  73. *
  74. * ```js
  75. * const controller = new AbortController();
  76. * const { signal } = controller;
  77. * const server = dgram.createSocket({ type: 'udp4', signal });
  78. * server.on('message', (msg, rinfo) => {
  79. * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
  80. * });
  81. * // Later, when you want to close the server.
  82. * controller.abort();
  83. * ```
  84. * @since v0.11.13
  85. * @param options Available options are:
  86. * @param callback Attached as a listener for `'message'` events. Optional.
  87. */
  88. function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
  89. function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
  90. /**
  91. * Encapsulates the datagram functionality.
  92. *
  93. * New instances of `dgram.Socket` are created using {@link createSocket}.
  94. * The `new` keyword is not to be used to create `dgram.Socket` instances.
  95. * @since v0.1.99
  96. */
  97. class Socket extends EventEmitter {
  98. /**
  99. * 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
  100. * specified, the operating system will choose
  101. * one interface and will add membership to it. To add membership to every
  102. * available interface, call `addMembership` multiple times, once per interface.
  103. *
  104. * When called on an unbound socket, this method will implicitly bind to a random
  105. * port, listening on all interfaces.
  106. *
  107. * When sharing a UDP socket across multiple `cluster` workers, the`socket.addMembership()` function must be called only once or an`EADDRINUSE` error will occur:
  108. *
  109. * ```js
  110. * import cluster from 'node:cluster';
  111. * import dgram from 'node:dgram';
  112. *
  113. * if (cluster.isPrimary) {
  114. * cluster.fork(); // Works ok.
  115. * cluster.fork(); // Fails with EADDRINUSE.
  116. * } else {
  117. * const s = dgram.createSocket('udp4');
  118. * s.bind(1234, () => {
  119. * s.addMembership('224.0.0.114');
  120. * });
  121. * }
  122. * ```
  123. * @since v0.6.9
  124. */
  125. addMembership(multicastAddress: string, multicastInterface?: string): void;
  126. /**
  127. * Returns an object containing the address information for a socket.
  128. * For UDP sockets, this object will contain `address`, `family`, and `port` properties.
  129. *
  130. * This method throws `EBADF` if called on an unbound socket.
  131. * @since v0.1.99
  132. */
  133. address(): AddressInfo;
  134. /**
  135. * For UDP sockets, causes the `dgram.Socket` to listen for datagram
  136. * messages on a named `port` and optional `address`. If `port` is not
  137. * specified or is `0`, the operating system will attempt to bind to a
  138. * random port. If `address` is not specified, the operating system will
  139. * attempt to listen on all addresses. Once binding is complete, a `'listening'` event is emitted and the optional `callback` function is
  140. * called.
  141. *
  142. * Specifying both a `'listening'` event listener and passing a `callback` to the `socket.bind()` method is not harmful but not very
  143. * useful.
  144. *
  145. * A bound datagram socket keeps the Node.js process running to receive
  146. * datagram messages.
  147. *
  148. * If binding fails, an `'error'` event is generated. In rare case (e.g.
  149. * attempting to bind with a closed socket), an `Error` may be thrown.
  150. *
  151. * Example of a UDP server listening on port 41234:
  152. *
  153. * ```js
  154. * import dgram from 'node:dgram';
  155. *
  156. * const server = dgram.createSocket('udp4');
  157. *
  158. * server.on('error', (err) => {
  159. * console.error(`server error:\n${err.stack}`);
  160. * server.close();
  161. * });
  162. *
  163. * server.on('message', (msg, rinfo) => {
  164. * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
  165. * });
  166. *
  167. * server.on('listening', () => {
  168. * const address = server.address();
  169. * console.log(`server listening ${address.address}:${address.port}`);
  170. * });
  171. *
  172. * server.bind(41234);
  173. * // Prints: server listening 0.0.0.0:41234
  174. * ```
  175. * @since v0.1.99
  176. * @param callback with no parameters. Called when binding is complete.
  177. */
  178. bind(port?: number, address?: string, callback?: () => void): this;
  179. bind(port?: number, callback?: () => void): this;
  180. bind(callback?: () => void): this;
  181. bind(options: BindOptions, callback?: () => void): this;
  182. /**
  183. * Close the underlying socket and stop listening for data on it. If a callback is
  184. * provided, it is added as a listener for the `'close'` event.
  185. * @since v0.1.99
  186. * @param callback Called when the socket has been closed.
  187. */
  188. close(callback?: () => void): this;
  189. /**
  190. * Associates the `dgram.Socket` to a remote address and port. Every
  191. * message sent by this handle is automatically sent to that destination. Also,
  192. * the socket will only receive messages from that remote peer.
  193. * Trying to call `connect()` on an already connected socket will result
  194. * in an `ERR_SOCKET_DGRAM_IS_CONNECTED` exception. If `address` is not
  195. * provided, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets)
  196. * will be used by default. Once the connection is complete, a `'connect'` event
  197. * is emitted and the optional `callback` function is called. In case of failure,
  198. * the `callback` is called or, failing this, an `'error'` event is emitted.
  199. * @since v12.0.0
  200. * @param callback Called when the connection is completed or on error.
  201. */
  202. connect(port: number, address?: string, callback?: () => void): void;
  203. connect(port: number, callback: () => void): void;
  204. /**
  205. * A synchronous function that disassociates a connected `dgram.Socket` from
  206. * its remote address. Trying to call `disconnect()` on an unbound or already
  207. * disconnected socket will result in an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception.
  208. * @since v12.0.0
  209. */
  210. disconnect(): void;
  211. /**
  212. * Instructs the kernel to leave a multicast group at `multicastAddress` using the `IP_DROP_MEMBERSHIP` socket option. This method is automatically called by the
  213. * kernel when the socket is closed or the process terminates, so most apps will
  214. * never have reason to call this.
  215. *
  216. * If `multicastInterface` is not specified, the operating system will attempt to
  217. * drop membership on all valid interfaces.
  218. * @since v0.6.9
  219. */
  220. dropMembership(multicastAddress: string, multicastInterface?: string): void;
  221. /**
  222. * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
  223. * @since v8.7.0
  224. * @return the `SO_RCVBUF` socket receive buffer size in bytes.
  225. */
  226. getRecvBufferSize(): number;
  227. /**
  228. * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
  229. * @since v8.7.0
  230. * @return the `SO_SNDBUF` socket send buffer size in bytes.
  231. */
  232. getSendBufferSize(): number;
  233. /**
  234. * @since v18.8.0, v16.19.0
  235. * @return Number of bytes queued for sending.
  236. */
  237. getSendQueueSize(): number;
  238. /**
  239. * @since v18.8.0, v16.19.0
  240. * @return Number of send requests currently in the queue awaiting to be processed.
  241. */
  242. getSendQueueCount(): number;
  243. /**
  244. * By default, binding a socket will cause it to block the Node.js process from
  245. * exiting as long as the socket is open. The `socket.unref()` method can be used
  246. * to exclude the socket from the reference counting that keeps the Node.js
  247. * process active. The `socket.ref()` method adds the socket back to the reference
  248. * counting and restores the default behavior.
  249. *
  250. * Calling `socket.ref()` multiples times will have no additional effect.
  251. *
  252. * The `socket.ref()` method returns a reference to the socket so calls can be
  253. * chained.
  254. * @since v0.9.1
  255. */
  256. ref(): this;
  257. /**
  258. * Returns an object containing the `address`, `family`, and `port` of the remote
  259. * endpoint. This method throws an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception
  260. * if the socket is not connected.
  261. * @since v12.0.0
  262. */
  263. remoteAddress(): AddressInfo;
  264. /**
  265. * Broadcasts a datagram on the socket.
  266. * For connectionless sockets, the destination `port` and `address` must be
  267. * specified. Connected sockets, on the other hand, will use their associated
  268. * remote endpoint, so the `port` and `address` arguments must not be set.
  269. *
  270. * The `msg` argument contains the message to be sent.
  271. * Depending on its type, different behavior can apply. If `msg` is a `Buffer`,
  272. * any `TypedArray` or a `DataView`,
  273. * the `offset` and `length` specify the offset within the `Buffer` where the
  274. * message begins and the number of bytes in the message, respectively.
  275. * If `msg` is a `String`, then it is automatically converted to a `Buffer` with `'utf8'` encoding. With messages that
  276. * contain multi-byte characters, `offset` and `length` will be calculated with
  277. * respect to `byte length` and not the character position.
  278. * If `msg` is an array, `offset` and `length` must not be specified.
  279. *
  280. * The `address` argument is a string. If the value of `address` is a host name,
  281. * DNS will be used to resolve the address of the host. If `address` is not
  282. * provided or otherwise nullish, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) will be used by default.
  283. *
  284. * If the socket has not been previously bound with a call to `bind`, the socket
  285. * is assigned a random port number and is bound to the "all interfaces" address
  286. * (`'0.0.0.0'` for `udp4` sockets, `'::0'` for `udp6` sockets.)
  287. *
  288. * An optional `callback` function may be specified to as a way of reporting
  289. * DNS errors or for determining when it is safe to reuse the `buf` object.
  290. * DNS lookups delay the time to send for at least one tick of the
  291. * Node.js event loop.
  292. *
  293. * 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
  294. * passed as the first argument to the `callback`. If a `callback` is not given,
  295. * the error is emitted as an `'error'` event on the `socket` object.
  296. *
  297. * Offset and length are optional but both _must_ be set if either are used.
  298. * They are supported only when the first argument is a `Buffer`, a `TypedArray`,
  299. * or a `DataView`.
  300. *
  301. * This method throws `ERR_SOCKET_BAD_PORT` if called on an unbound socket.
  302. *
  303. * Example of sending a UDP packet to a port on `localhost`;
  304. *
  305. * ```js
  306. * import dgram from 'node:dgram';
  307. * import { Buffer } from 'node:buffer';
  308. *
  309. * const message = Buffer.from('Some bytes');
  310. * const client = dgram.createSocket('udp4');
  311. * client.send(message, 41234, 'localhost', (err) => {
  312. * client.close();
  313. * });
  314. * ```
  315. *
  316. * Example of sending a UDP packet composed of multiple buffers to a port on`127.0.0.1`;
  317. *
  318. * ```js
  319. * import dgram from 'node:dgram';
  320. * import { Buffer } from 'node:buffer';
  321. *
  322. * const buf1 = Buffer.from('Some ');
  323. * const buf2 = Buffer.from('bytes');
  324. * const client = dgram.createSocket('udp4');
  325. * client.send([buf1, buf2], 41234, (err) => {
  326. * client.close();
  327. * });
  328. * ```
  329. *
  330. * Sending multiple buffers might be faster or slower depending on the
  331. * application and operating system. Run benchmarks to
  332. * determine the optimal strategy on a case-by-case basis. Generally speaking,
  333. * however, sending multiple buffers is faster.
  334. *
  335. * Example of sending a UDP packet using a socket connected to a port on `localhost`:
  336. *
  337. * ```js
  338. * import dgram from 'node:dgram';
  339. * import { Buffer } from 'node:buffer';
  340. *
  341. * const message = Buffer.from('Some bytes');
  342. * const client = dgram.createSocket('udp4');
  343. * client.connect(41234, 'localhost', (err) => {
  344. * client.send(message, (err) => {
  345. * client.close();
  346. * });
  347. * });
  348. * ```
  349. * @since v0.1.99
  350. * @param msg Message to be sent.
  351. * @param offset Offset in the buffer where the message starts.
  352. * @param length Number of bytes in the message.
  353. * @param port Destination port.
  354. * @param address Destination host name or IP address.
  355. * @param callback Called when the message has been sent.
  356. */
  357. send(
  358. msg: string | NodeJS.ArrayBufferView | readonly any[],
  359. port?: number,
  360. address?: string,
  361. callback?: (error: Error | null, bytes: number) => void,
  362. ): void;
  363. send(
  364. msg: string | NodeJS.ArrayBufferView | readonly any[],
  365. port?: number,
  366. callback?: (error: Error | null, bytes: number) => void,
  367. ): void;
  368. send(
  369. msg: string | NodeJS.ArrayBufferView | readonly any[],
  370. callback?: (error: Error | null, bytes: number) => void,
  371. ): void;
  372. send(
  373. msg: string | NodeJS.ArrayBufferView,
  374. offset: number,
  375. length: number,
  376. port?: number,
  377. address?: string,
  378. callback?: (error: Error | null, bytes: number) => void,
  379. ): void;
  380. send(
  381. msg: string | NodeJS.ArrayBufferView,
  382. offset: number,
  383. length: number,
  384. port?: number,
  385. callback?: (error: Error | null, bytes: number) => void,
  386. ): void;
  387. send(
  388. msg: string | NodeJS.ArrayBufferView,
  389. offset: number,
  390. length: number,
  391. callback?: (error: Error | null, bytes: number) => void,
  392. ): void;
  393. /**
  394. * Sets or clears the `SO_BROADCAST` socket option. When set to `true`, UDP
  395. * packets may be sent to a local interface's broadcast address.
  396. *
  397. * This method throws `EBADF` if called on an unbound socket.
  398. * @since v0.6.9
  399. */
  400. setBroadcast(flag: boolean): void;
  401. /**
  402. * _All references to scope in this section are referring to [IPv6 Zone Indices](https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses), which are defined by [RFC
  403. * 4007](https://tools.ietf.org/html/rfc4007). In string form, an IP_
  404. * _with a scope index is written as `'IP%scope'` where scope is an interface name_
  405. * _or interface number._
  406. *
  407. * Sets the default outgoing multicast interface of the socket to a chosen
  408. * interface or back to system interface selection. The `multicastInterface` must
  409. * be a valid string representation of an IP from the socket's family.
  410. *
  411. * For IPv4 sockets, this should be the IP configured for the desired physical
  412. * interface. All packets sent to multicast on the socket will be sent on the
  413. * interface determined by the most recent successful use of this call.
  414. *
  415. * For IPv6 sockets, `multicastInterface` should include a scope to indicate the
  416. * interface as in the examples that follow. In IPv6, individual `send` calls can
  417. * also use explicit scope in addresses, so only packets sent to a multicast
  418. * address without specifying an explicit scope are affected by the most recent
  419. * successful use of this call.
  420. *
  421. * This method throws `EBADF` if called on an unbound socket.
  422. *
  423. * #### Example: IPv6 outgoing multicast interface
  424. *
  425. * On most systems, where scope format uses the interface name:
  426. *
  427. * ```js
  428. * const socket = dgram.createSocket('udp6');
  429. *
  430. * socket.bind(1234, () => {
  431. * socket.setMulticastInterface('::%eth1');
  432. * });
  433. * ```
  434. *
  435. * On Windows, where scope format uses an interface number:
  436. *
  437. * ```js
  438. * const socket = dgram.createSocket('udp6');
  439. *
  440. * socket.bind(1234, () => {
  441. * socket.setMulticastInterface('::%2');
  442. * });
  443. * ```
  444. *
  445. * #### Example: IPv4 outgoing multicast interface
  446. *
  447. * All systems use an IP of the host on the desired physical interface:
  448. *
  449. * ```js
  450. * const socket = dgram.createSocket('udp4');
  451. *
  452. * socket.bind(1234, () => {
  453. * socket.setMulticastInterface('10.0.0.2');
  454. * });
  455. * ```
  456. * @since v8.6.0
  457. */
  458. setMulticastInterface(multicastInterface: string): void;
  459. /**
  460. * Sets or clears the `IP_MULTICAST_LOOP` socket option. When set to `true`,
  461. * multicast packets will also be received on the local interface.
  462. *
  463. * This method throws `EBADF` if called on an unbound socket.
  464. * @since v0.3.8
  465. */
  466. setMulticastLoopback(flag: boolean): boolean;
  467. /**
  468. * Sets the `IP_MULTICAST_TTL` socket option. While TTL generally stands for
  469. * "Time to Live", in this context it specifies the number of IP hops that a
  470. * packet is allowed to travel through, specifically for multicast traffic. Each
  471. * router or gateway that forwards a packet decrements the TTL. If the TTL is
  472. * decremented to 0 by a router, it will not be forwarded.
  473. *
  474. * The `ttl` argument may be between 0 and 255\. The default on most systems is `1`.
  475. *
  476. * This method throws `EBADF` if called on an unbound socket.
  477. * @since v0.3.8
  478. */
  479. setMulticastTTL(ttl: number): number;
  480. /**
  481. * Sets the `SO_RCVBUF` socket option. Sets the maximum socket receive buffer
  482. * in bytes.
  483. *
  484. * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
  485. * @since v8.7.0
  486. */
  487. setRecvBufferSize(size: number): void;
  488. /**
  489. * Sets the `SO_SNDBUF` socket option. Sets the maximum socket send buffer
  490. * in bytes.
  491. *
  492. * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
  493. * @since v8.7.0
  494. */
  495. setSendBufferSize(size: number): void;
  496. /**
  497. * Sets the `IP_TTL` socket option. While TTL generally stands for "Time to Live",
  498. * in this context it specifies the number of IP hops that a packet is allowed to
  499. * travel through. Each router or gateway that forwards a packet decrements the
  500. * TTL. If the TTL is decremented to 0 by a router, it will not be forwarded.
  501. * Changing TTL values is typically done for network probes or when multicasting.
  502. *
  503. * The `ttl` argument may be between 1 and 255\. The default on most systems
  504. * is 64.
  505. *
  506. * This method throws `EBADF` if called on an unbound socket.
  507. * @since v0.1.101
  508. */
  509. setTTL(ttl: number): number;
  510. /**
  511. * By default, binding a socket will cause it to block the Node.js process from
  512. * exiting as long as the socket is open. The `socket.unref()` method can be used
  513. * to exclude the socket from the reference counting that keeps the Node.js
  514. * process active, allowing the process to exit even if the socket is still
  515. * listening.
  516. *
  517. * Calling `socket.unref()` multiple times will have no additional effect.
  518. *
  519. * The `socket.unref()` method returns a reference to the socket so calls can be
  520. * chained.
  521. * @since v0.9.1
  522. */
  523. unref(): this;
  524. /**
  525. * Tells the kernel to join a source-specific multicast channel at the given `sourceAddress` and `groupAddress`, using the `multicastInterface` with the `IP_ADD_SOURCE_MEMBERSHIP` socket
  526. * option. If the `multicastInterface` argument
  527. * is not specified, the operating system will choose one interface and will add
  528. * membership to it. To add membership to every available interface, call `socket.addSourceSpecificMembership()` multiple times, once per interface.
  529. *
  530. * When called on an unbound socket, this method will implicitly bind to a random
  531. * port, listening on all interfaces.
  532. * @since v13.1.0, v12.16.0
  533. */
  534. addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void;
  535. /**
  536. * Instructs the kernel to leave a source-specific multicast channel at the given `sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP` socket option. This method is
  537. * automatically called by the kernel when the
  538. * socket is closed or the process terminates, so most apps will never have
  539. * reason to call this.
  540. *
  541. * If `multicastInterface` is not specified, the operating system will attempt to
  542. * drop membership on all valid interfaces.
  543. * @since v13.1.0, v12.16.0
  544. */
  545. dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void;
  546. /**
  547. * events.EventEmitter
  548. * 1. close
  549. * 2. connect
  550. * 3. error
  551. * 4. listening
  552. * 5. message
  553. */
  554. addListener(event: string, listener: (...args: any[]) => void): this;
  555. addListener(event: "close", listener: () => void): this;
  556. addListener(event: "connect", listener: () => void): this;
  557. addListener(event: "error", listener: (err: Error) => void): this;
  558. addListener(event: "listening", listener: () => void): this;
  559. addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
  560. emit(event: string | symbol, ...args: any[]): boolean;
  561. emit(event: "close"): boolean;
  562. emit(event: "connect"): boolean;
  563. emit(event: "error", err: Error): boolean;
  564. emit(event: "listening"): boolean;
  565. emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean;
  566. on(event: string, listener: (...args: any[]) => void): this;
  567. on(event: "close", listener: () => void): this;
  568. on(event: "connect", listener: () => void): this;
  569. on(event: "error", listener: (err: Error) => void): this;
  570. on(event: "listening", listener: () => void): this;
  571. on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
  572. once(event: string, listener: (...args: any[]) => void): this;
  573. once(event: "close", listener: () => void): this;
  574. once(event: "connect", listener: () => void): this;
  575. once(event: "error", listener: (err: Error) => void): this;
  576. once(event: "listening", listener: () => void): this;
  577. once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
  578. prependListener(event: string, listener: (...args: any[]) => void): this;
  579. prependListener(event: "close", listener: () => void): this;
  580. prependListener(event: "connect", listener: () => void): this;
  581. prependListener(event: "error", listener: (err: Error) => void): this;
  582. prependListener(event: "listening", listener: () => void): this;
  583. prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
  584. prependOnceListener(event: string, listener: (...args: any[]) => void): this;
  585. prependOnceListener(event: "close", listener: () => void): this;
  586. prependOnceListener(event: "connect", listener: () => void): this;
  587. prependOnceListener(event: "error", listener: (err: Error) => void): this;
  588. prependOnceListener(event: "listening", listener: () => void): this;
  589. prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
  590. /**
  591. * Calls `socket.close()` and returns a promise that fulfills when the socket has closed.
  592. * @since v20.5.0
  593. */
  594. [Symbol.asyncDispose](): Promise<void>;
  595. }
  596. }
  597. declare module "node:dgram" {
  598. export * from "dgram";
  599. }