diff --git a/lib/dgram.js b/lib/dgram.js index a919e16497486e..f005b8839da400 100644 --- a/lib/dgram.js +++ b/lib/dgram.js @@ -341,7 +341,7 @@ function afterSend(err) { Socket.prototype.close = function(callback) { - if (callback) + if (typeof callback === 'function') this.on('close', callback); this._healthCheck(); this._stopReceiving(); diff --git a/test/parallel/test-dgram-close-is-not-callback.js b/test/parallel/test-dgram-close-is-not-callback.js new file mode 100644 index 00000000000000..94035af97027bb --- /dev/null +++ b/test/parallel/test-dgram-close-is-not-callback.js @@ -0,0 +1,21 @@ +var assert = require('assert'); +var common = require('../common'); +var dgram = require('dgram'); + +var buf = new Buffer(1024); +buf.fill(42); + +var socket = dgram.createSocket('udp4'); +var closeEvents = 0; +socket.send(buf, 0, buf.length, common.PORT, 'localhost'); + +// if close callback is not function, ignore the argument. +socket.close('bad argument'); + +socket.on('close', function() { + ++closeEvents; +}); + +process.on('exit', function() { + assert.equal(closeEvents, 1); +});