| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -372,6 +372,17 @@ added: v0.1.99 | |||
| 372 | 372 | Close the underlying socket and stop listening for data on it. If a callback is | |
| 373 | 373 | provided, it is added as a listener for the [`'close'`][] event. | |
| 374 | 374 | ||
| 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 | + | ||
| 375 | 386 | ### `socket.connect(port[, address][, callback])` | |
| 376 | 387 | ||
| 377 | 388 | <!-- YAML | |
@@ -988,4 +999,5 @@ and `udp6` sockets). The bound address and port can be retrieved using | |||
| 988 | 999 | [`socket.address().address`]: #socketaddress | |
| 989 | 1000 | [`socket.address().port`]: #socketaddress | |
| 990 | 1001 | [`socket.bind()`]: #socketbindport-address-callback | |
| 1002 | + [`socket.close()`]: #socketclosecallback | ||
| 991 | 1003 | [byte length]: buffer.md#static-method-bufferbytelengthstring-encoding | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -30,6 +30,7 @@ const { | |||
| 30 | 30 | ObjectDefineProperty, | |
| 31 | 31 | ObjectSetPrototypeOf, | |
| 32 | 32 | ReflectApply, | |
| 33 | + SymbolAsyncDispose, | ||
| 33 | 34 | SymbolDispose, | |
| 34 | 35 | } = primordials; | |
| 35 | 36 | ||
@@ -60,7 +61,7 @@ const { | |||
| 60 | 61 | validatePort, | |
| 61 | 62 | } = require('internal/validators'); | |
| 62 | 63 | const { Buffer } = require('buffer'); | |
| 63 | - const { deprecate } = require('internal/util'); | ||
| 64 | + const { deprecate, promisify } = require('internal/util'); | ||
| 64 | 65 | const { isArrayBufferView } = require('internal/util/types'); | |
| 65 | 66 | const EventEmitter = require('events'); | |
| 66 | 67 | const { | |
@@ -753,6 +754,13 @@ Socket.prototype.close = function(callback) { | |||
| 753 | 754 | return this; | |
| 754 | 755 | }; | |
| 755 | 756 | ||
| 757 | + Socket.prototype[SymbolAsyncDispose] = async function() { | ||
| 758 | + if (!this[kStateSymbol].handle) { | ||
| 759 | + return; | ||
| 760 | + } | ||
| 761 | + return FunctionPrototypeCall(promisify(this.close), this); | ||
| 762 | + }; | ||
| 763 | + | ||
| 756 | 764 | ||
| 757 | 765 | function socketCloseNT(self) { | |
| 758 | 766 | self.emit('close'); | |
| Original file line number | Diff line number | Diff 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 | + }); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments