aboutsummaryrefslogtreecommitdiff
path: root/test/parallel/test-dgram-bind-error-repeat.js
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-11-01 19:50:40 +0100
committerAnna Henningsen <anna@addaleax.net>2019-11-07 00:55:00 +0100
commit115792dfde436354c82f38361cbff75ad226b8d0 (patch)
tree3fb8f8172f866fcf24482908607cf1ab59fc2cfa /test/parallel/test-dgram-bind-error-repeat.js
parent99e874e545b7c69bbd22c93b7546037290a727d3 (diff)
downloadandroid-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.js27
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());
+});