Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
set readable/writable for pipes
  • Loading branch information
Igor Zinkovsky committed Feb 10, 2012
1 parent c9f58cc commit c7771bc
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 9 deletions.
9 changes: 6 additions & 3 deletions lib/net.js
Expand Up @@ -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
Expand All @@ -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');

Expand Down
15 changes: 12 additions & 3 deletions src/pipe_wrap.cc
Expand Up @@ -53,6 +53,7 @@ using v8::TryCatch;
using v8::Context;
using v8::Arguments;
using v8::Integer;
using v8::Boolean;

Persistent<Function> pipeConstructor;

Expand Down Expand Up @@ -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;
}
Expand Down
8 changes: 5 additions & 3 deletions src/tcp_wrap.cc
Expand Up @@ -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;
}
Expand Down

0 comments on commit c7771bc

Please sign in to comment.