mirror of
https://github.com/nodejs/node-v0.x-archive.git
synced 2026-04-28 03:01:10 -04:00
Wrap uv_pipe_open, implement net.Stream(fd);
Fixes simple/test-child-process-ipc on unix.
This commit is contained in:
@@ -78,21 +78,24 @@ function Socket(options) {
|
||||
stream.Stream.call(this);
|
||||
|
||||
if (typeof options == 'number') {
|
||||
// Legacy interface. Uncomment the following lines after
|
||||
// libuv backend is stable and API compatibile with legaacy.
|
||||
// console.error('Deprecated interface net.Socket(fd).');
|
||||
// console.trace();
|
||||
// Legacy interface.
|
||||
// Must support legacy interface. NPM depends on it.
|
||||
// https://github.com/isaacs/npm/blob/c7824f412f0cb59d6f55cf0bc220253c39e6029f/lib/utils/output.js#L110
|
||||
// TODO Before we can do this we need a way to open a uv_stream_t by fd.
|
||||
throw new Error("Not yet implemented")
|
||||
var fd = options;
|
||||
|
||||
// Uncomment the following lines after libuv backend is stable and API
|
||||
// compatibile with legaacy.
|
||||
// console.error('Deprecated interface net.Socket(fd).');
|
||||
// console.trace();
|
||||
this._handle = createPipe();
|
||||
this._handle.open(fd);
|
||||
initSocketHandle(this);
|
||||
} else {
|
||||
// private
|
||||
this._handle = options && options.handle;
|
||||
initSocketHandle(this);
|
||||
this.allowHalfOpen = options && options.allowHalfOpen;
|
||||
}
|
||||
|
||||
// private
|
||||
this._handle = options && options.handle;
|
||||
initSocketHandle(this);
|
||||
|
||||
this.allowHalfOpen = options && options.allowHalfOpen;
|
||||
}
|
||||
util.inherits(Socket, stream.Stream);
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ void PipeWrap::Initialize(Handle<Object> target) {
|
||||
NODE_SET_PROTOTYPE_METHOD(t, "bind", Bind);
|
||||
NODE_SET_PROTOTYPE_METHOD(t, "listen", Listen);
|
||||
NODE_SET_PROTOTYPE_METHOD(t, "connect", Connect);
|
||||
NODE_SET_PROTOTYPE_METHOD(t, "open", Open);
|
||||
|
||||
pipeConstructor = Persistent<Function>::New(t->GetFunction());
|
||||
|
||||
@@ -195,6 +196,19 @@ void PipeWrap::AfterConnect(uv_connect_t* req, int status) {
|
||||
}
|
||||
|
||||
|
||||
Handle<Value> PipeWrap::Open(const Arguments& args) {
|
||||
HandleScope scope;
|
||||
|
||||
UNWRAP
|
||||
|
||||
int fd = args[0]->IntegerValue();
|
||||
|
||||
uv_pipe_open(&wrap->handle_, fd);
|
||||
|
||||
return scope.Close(v8::Null());
|
||||
}
|
||||
|
||||
|
||||
Handle<Value> PipeWrap::Connect(const Arguments& args) {
|
||||
HandleScope scope;
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ class PipeWrap : StreamWrap {
|
||||
static v8::Handle<v8::Value> Bind(const v8::Arguments& args);
|
||||
static v8::Handle<v8::Value> Listen(const v8::Arguments& args);
|
||||
static v8::Handle<v8::Value> Connect(const v8::Arguments& args);
|
||||
static v8::Handle<v8::Value> Open(const v8::Arguments& args);
|
||||
|
||||
static void OnConnection(uv_stream_t* handle, int status);
|
||||
static void AfterConnect(uv_connect_t* req, int status);
|
||||
|
||||
Reference in New Issue
Block a user