GeezerVison is showing github.com — lib: return directly if udp socket close before lookup · nodejs/node@fcc6d54
File tree
Expand file treeCollapse file tree
Open diff view settings
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: lib/dgram.js +3-3Lines changed: 3 additions & 3 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -328,6 +328,9 @@ Socket.prototype.bind = function(port_, address_ /* , callback */) { |
328 | 328 |
|
329 | 329 | // Resolve address first |
330 | 330 | state.handle.lookup(address, (err, ip) => { |
| 331 | + if (!state.handle) |
| 332 | + return; // Handle has been closed in the mean time |
| 333 | + |
331 | 334 | if (err) { |
332 | 335 | state.bindState = BIND_STATE_UNBOUND; |
333 | 336 | this.emit('error', err); |
@@ -356,9 +359,6 @@ Socket.prototype.bind = function(port_, address_ /* , callback */) { |
356 | 359 | this.emit('error', ex); |
357 | 360 | }); |
358 | 361 | } else { |
359 | | - if (!state.handle) |
360 | | - return; // Handle has been closed in the mean time |
361 | | - |
362 | 362 | const err = state.handle.bind(ip, port || 0, flags); |
363 | 363 | if (err) { |
364 | 364 | const ex = new ExceptionWithHostPort(err, 'bind', ip, port); |
|
Collapse file
Copy file name to clipboard +19Lines changed: 19 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
|
| 1 | +'use strict'; |
| 2 | +const common = require('../common'); |
| 3 | +const dgram = require('dgram'); |
| 4 | + |
| 5 | +// Do not emit error event in callback which is called by lookup when socket is closed |
| 6 | +const socket = dgram.createSocket({ |
| 7 | + type: 'udp4', |
| 8 | + lookup: (...args) => { |
| 9 | + // Call lookup callback after 1s |
| 10 | + setTimeout(() => { |
| 11 | + args.at(-1)(new Error('an error')); |
| 12 | + }, 1000); |
| 13 | + } |
| 14 | +}); |
| 15 | + |
| 16 | +socket.on('error', common.mustNotCall()); |
| 17 | +socket.bind(12345, 'localhost'); |
| 18 | +// Close the socket before calling DNS lookup callback |
| 19 | +socket.close(); |