Skip to content

Commit

Permalink
dgram: close() should accept a callback
Browse files Browse the repository at this point in the history
Like net, http, and https server.close, and socket.end(), etc.

PR-URL: #217
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
sam-github authored and bnoordhuis committed Dec 30, 2014
1 parent 7349d7f commit 63005ee
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 5 deletions.
7 changes: 4 additions & 3 deletions doc/api/dgram.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ are created.

### Event: 'close'

Emitted when a socket is closed with `close()`. No new `message` events will be emitted
Emitted after a socket is closed with `close()`. No new `message` events will be emitted
on this socket.

### Event: 'error'
Expand Down Expand Up @@ -228,9 +228,10 @@ shown below.
});


### socket.close()
### socket.close([callback])

Close the underlying socket and stop listening for data on it.
Close the underlying socket and stop listening for data on it. If a callback is
provided, it is added as a listener for the ['close'](#dgram_event_close) event.

### socket.address()

Expand Down
4 changes: 3 additions & 1 deletion lib/dgram.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,9 @@ function afterSend(err) {
}


Socket.prototype.close = function() {
Socket.prototype.close = function(callback) {
if (callback)
this.on('close', callback);
this._healthCheck();
this._stopReceiving();
this._handle.close();
Expand Down
7 changes: 6 additions & 1 deletion test/parallel/test-dgram-close.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,13 @@ buf.fill(42);
var socket = dgram.createSocket('udp4');
var handle = socket._handle;
var closeEvents = 0;
var closeCallbacks = 0;
socket.send(buf, 0, buf.length, common.PORT, 'localhost');
assert.strictEqual(socket.close(), socket);
assert.strictEqual(socket.close(function() {
++closeCallbacks;
}), socket);
socket.on('close', function() {
assert.equal(closeCallbacks, 1);
++closeEvents;
});
socket = null;
Expand All @@ -48,4 +52,5 @@ setImmediate(function() {

process.on('exit', function() {
assert.equal(closeEvents, 1);
assert.equal(closeCallbacks, 1);
});

0 comments on commit 63005ee

Please sign in to comment.