Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 573eb4b

Browse filesBrowse files
atlowChemiruyadorno
authored andcommitted
dgram: socket add asyncDispose
PR-URL: #48717 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent f74c2fc commit 573eb4b
Copy full SHA for 573eb4b

File tree

Expand file treeCollapse file tree

3 files changed

+41
-1
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+41
-1
lines changed
Open diff view settings
Collapse file

‎doc/api/dgram.md‎

Copy file name to clipboardExpand all lines: doc/api/dgram.md
+12Lines changed: 12 additions & 0 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,17 @@ added: v0.1.99
372372
Close the underlying socket and stop listening for data on it. If a callback is
373373
provided, it is added as a listener for the [`'close'`][] event.
374374

375+
### `socket[Symbol.asyncDispose]()`
376+
377+
<!-- YAML
378+
added: REPLACEME
379+
-->
380+
381+
> Stability: 1 - Experimental
382+
383+
Calls [`socket.close()`][] and returns a promise that fulfills when the
384+
socket has closed.
385+
375386
### `socket.connect(port[, address][, callback])`
376387

377388
<!-- YAML
@@ -988,4 +999,5 @@ and `udp6` sockets). The bound address and port can be retrieved using
988999
[`socket.address().address`]: #socketaddress
9891000
[`socket.address().port`]: #socketaddress
9901001
[`socket.bind()`]: #socketbindport-address-callback
1002+
[`socket.close()`]: #socketclosecallback
9911003
[byte length]: buffer.md#static-method-bufferbytelengthstring-encoding
Collapse file

‎lib/dgram.js‎

Copy file name to clipboardExpand all lines: lib/dgram.js
+9-1Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const {
3030
ObjectDefineProperty,
3131
ObjectSetPrototypeOf,
3232
ReflectApply,
33+
SymbolAsyncDispose,
3334
SymbolDispose,
3435
} = primordials;
3536

@@ -60,7 +61,7 @@ const {
6061
validatePort,
6162
} = require('internal/validators');
6263
const { Buffer } = require('buffer');
63-
const { deprecate } = require('internal/util');
64+
const { deprecate, promisify } = require('internal/util');
6465
const { isArrayBufferView } = require('internal/util/types');
6566
const EventEmitter = require('events');
6667
const {
@@ -753,6 +754,13 @@ Socket.prototype.close = function(callback) {
753754
return this;
754755
};
755756

757+
Socket.prototype[SymbolAsyncDispose] = async function() {
758+
if (!this[kStateSymbol].handle) {
759+
return;
760+
}
761+
return FunctionPrototypeCall(promisify(this.close), this);
762+
};
763+
756764

757765
function socketCloseNT(self) {
758766
self.emit('close');
Collapse file
+20Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import * as common from '../common/index.mjs';
2+
import assert from 'node:assert';
3+
import dgram from 'node:dgram';
4+
import { describe, it } from 'node:test';
5+
6+
describe('dgram.Socket[Symbol.asyncDispose]()', () => {
7+
it('should close the socket', async () => {
8+
const server = dgram.createSocket({ type: 'udp4' });
9+
server.on('close', common.mustCall());
10+
await server[Symbol.asyncDispose]().then(common.mustCall());
11+
12+
assert.throws(() => server.address(), { code: 'ERR_SOCKET_DGRAM_NOT_RUNNING' });
13+
});
14+
15+
it('should resolve even if the socket is already closed', async () => {
16+
const server = dgram.createSocket({ type: 'udp4' });
17+
await server[Symbol.asyncDispose]().then(common.mustCall());
18+
await server[Symbol.asyncDispose]().then(common.mustCall(), common.mustNotCall());
19+
});
20+
});

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.