diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-11-01 19:50:40 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-11-07 00:55:00 +0100 |
commit | 115792dfde436354c82f38361cbff75ad226b8d0 (patch) | |
tree | 3fb8f8172f866fcf24482908607cf1ab59fc2cfa /test/parallel/test-dgram-bind-error-repeat.js | |
parent | 99e874e545b7c69bbd22c93b7546037290a727d3 (diff) | |
download | android-node-v8-115792dfde436354c82f38361cbff75ad226b8d0.tar.gz android-node-v8-115792dfde436354c82f38361cbff75ad226b8d0.tar.bz2 android-node-v8-115792dfde436354c82f38361cbff75ad226b8d0.zip |
dgram: remove listeners on bind error
This avoids piling up `'listening'` event listeners if
`.bind()` fails repeatedly.
Fixes: https://github.com/nodejs/node/issues/30209
PR-URL: https://github.com/nodejs/node/pull/30210
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/parallel/test-dgram-bind-error-repeat.js')
-rw-r--r-- | test/parallel/test-dgram-bind-error-repeat.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/parallel/test-dgram-bind-error-repeat.js b/test/parallel/test-dgram-bind-error-repeat.js new file mode 100644 index 0000000000..a520d30a51 --- /dev/null +++ b/test/parallel/test-dgram-bind-error-repeat.js @@ -0,0 +1,27 @@ +'use strict'; +const common = require('../common'); +const dgram = require('dgram'); + +// Regression test for https://github.com/nodejs/node/issues/30209 +// No warning should be emitted when re-trying `.bind()` on UDP sockets +// repeatedly. + +process.on('warning', common.mustNotCall()); + +const reservePortSocket = dgram.createSocket('udp4'); +reservePortSocket.bind(() => { + const { port } = reservePortSocket.address(); + + const newSocket = dgram.createSocket('udp4'); + + let errors = 0; + newSocket.on('error', common.mustCall(() => { + if (++errors < 20) { + newSocket.bind(port, common.mustNotCall()); + } else { + newSocket.close(); + reservePortSocket.close(); + } + }, 20)); + newSocket.bind(port, common.mustNotCall()); +}); |