Skip to content

Commit

Permalink
fs,net: emit 'ready' for fs streams and sockets
Browse files Browse the repository at this point in the history
... in addition to the event names they currently use.

Currently, various internal streams have different events that
indicate that the underlying resource has successfully been
established. This commit adds ready event for fs and net
sockets to standardize on emitting ready for all of these streams.

PR-URL: #19408
Fixes: #19304
Reviewed-By: Anna Henningsen <[email protected]>
  • Loading branch information
sameer-coder authored and targos committed Mar 30, 2018
1 parent fdc51a1 commit 8a8b43e
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/fs.js
Original file line number Diff line number Diff line change
Expand Up @@ -2076,6 +2076,7 @@ ReadStream.prototype.open = function() {

self.fd = fd;
self.emit('open', fd);
self.emit('ready');
// start the flow of data.
self.read();
});
Expand Down Expand Up @@ -2234,6 +2235,7 @@ WriteStream.prototype.open = function() {

this.fd = fd;
this.emit('open', fd);
this.emit('ready');
});
};

Expand Down
1 change: 1 addition & 0 deletions lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -1158,6 +1158,7 @@ function afterConnect(status, handle, req, readable, writable) {
self._unrefTimer();

self.emit('connect');
self.emit('ready');

// start the first read, or get an immediate EOF.
// this doesn't actually consume any bytes, because len=0.
Expand Down
13 changes: 13 additions & 0 deletions test/parallel/test-fs-ready-event-stream.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'use strict';
const common = require('../common');
const fs = require('fs');
const path = require('path');
const tmpdir = require('../common/tmpdir');

const readStream = fs.createReadStream(__filename);
readStream.on('ready', common.mustCall(() => {}, 1));

const writeFile = path.join(tmpdir.path, 'write-fsreadyevent.txt');
tmpdir.refresh();
const writeStream = fs.createWriteStream(writeFile, { autoClose: true });
writeStream.on('ready', common.mustCall(() => {}, 1));
20 changes: 20 additions & 0 deletions test/parallel/test-net-socket-ready-without-cb.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'use strict';
const common = require('../common');

// This test ensures that socket.connect can be called without callback
// which is optional.

const net = require('net');

const server = net.createServer(common.mustCall(function(conn) {
conn.end();
server.close();
})).listen(0, common.mustCall(function() {
const client = new net.Socket();

client.on('ready', common.mustCall(function() {
client.end();
}));

client.connect(server.address());
}));

0 comments on commit 8a8b43e

Please sign in to comment.