Fix process.stdout.end() throws ENOTSOCK error.

pull/5370/head
koichik 2011-02-23 12:03:49 +09:00 committed by Ryan Dahl
parent f918e57f8b
commit 0a51a6d3ac
3 changed files with 38 additions and 0 deletions

View File

@ -35,6 +35,12 @@ function ReadStream(fd) {
if (!(this instanceof ReadStream)) return new ReadStream(fd);
net.Socket.call(this, fd);
if (this._writeWatcher) {
this._writeWatcher.stop();
this._writeWatcher = null;
}
this.writable = false;
var self = this,
keypressListeners = this.listeners('keypress');
@ -285,6 +291,12 @@ ReadStream.prototype._emitKey = function(s) {
function WriteStream(fd) {
if (!(this instanceof WriteStream)) return new WriteStream(fd);
net.Socket.call(this, fd);
if (this._readWatcher) {
this._readWatcher.stop();
this._readWatcher = null;
}
this.readable = false;
}
inherits(WriteStream, net.Socket);
exports.WriteStream = WriteStream;

View File

@ -0,0 +1,12 @@
// Can't test this when 'make test' doesn't assign a tty to the stdout.
var common = require('../common');
var assert = require('assert');
var tty = require('tty');
assert.ok(process.stdin instanceof tty.ReadStream);
assert.ok(process.stdin.readable);
assert.ok(!process.stdin.writable);
assert.ok(process.stdout instanceof tty.WriteStream);
assert.ok(!process.stdout.readable);
assert.ok(process.stdout.writable);

View File

@ -0,0 +1,14 @@
// Can't test this when 'make test' doesn't assign a tty to the stdout.
var common = require('../common');
var assert = require('assert');
var tty = require('tty');
var closed = false;
process.stdout.on('close', function() {
closed = true;
});
process.on('exit', function() {
assert.ok(closed);
});
process.stdout.end();