set readable/writable for pipes

This commit is contained in:
Igor Zinkovsky
2012-02-10 01:35:35 -08:00
parent c9f58cc595
commit c7771bc2ec
3 changed files with 23 additions and 9 deletions

View File

@@ -593,7 +593,7 @@ Socket.prototype.connect = function(port /* [host], [cb] */) {
};
function afterConnect(status, handle, req) {
function afterConnect(status, handle, req, readable, writable) {
var self = handle.socket;
// callback may come after call to destroy
@@ -609,10 +609,13 @@ function afterConnect(status, handle, req) {
self._connecting = false;
if (status == 0) {
self.readable = self.writable = true;
self.readable = readable;
self.writable = writable;
timers.active(self);
handle.readStart();
if (self.readable) {
handle.readStart();
}
self.emit('connect');

View File

@@ -53,6 +53,7 @@ using v8::TryCatch;
using v8::Context;
using v8::Arguments;
using v8::Integer;
using v8::Boolean;
Persistent<Function> pipeConstructor;
@@ -224,17 +225,25 @@ void PipeWrap::AfterConnect(uv_connect_t* req, int status) {
assert(req_wrap->object_.IsEmpty() == false);
assert(wrap->object_.IsEmpty() == false);
bool readable, writable;
if (status) {
SetErrno(uv_last_error(uv_default_loop()));
readable = writable = 0;
} else {
readable = uv_is_readable(req->handle) != 0;
writable = uv_is_writable(req->handle) != 0;
}
Local<Value> argv[3] = {
Local<Value> argv[5] = {
Integer::New(status),
Local<Value>::New(wrap->object_),
Local<Value>::New(req_wrap->object_)
Local<Value>::New(req_wrap->object_),
Local<Value>::New(Boolean::New(readable)),
Local<Value>::New(Boolean::New(writable))
};
MakeCallback(req_wrap->object_, "oncomplete", 3, argv);
MakeCallback(req_wrap->object_, "oncomplete", 5, argv);
delete req_wrap;
}

View File

@@ -396,13 +396,15 @@ void TCPWrap::AfterConnect(uv_connect_t* req, int status) {
SetErrno(uv_last_error(uv_default_loop()));
}
Local<Value> argv[3] = {
Local<Value> argv[5] = {
Integer::New(status),
Local<Value>::New(wrap->object_),
Local<Value>::New(req_wrap->object_)
Local<Value>::New(req_wrap->object_),
Local<Value>::New(v8::True()),
Local<Value>::New(v8::True())
};
MakeCallback(req_wrap->object_, "oncomplete", 3, argv);
MakeCallback(req_wrap->object_, "oncomplete", 5, argv);
delete req_wrap;
}