Skip to content

Commit

Permalink
Revert "lib,src: add unix socket getsockname/getpeername"
Browse files Browse the repository at this point in the history
This reverts commit 6cd0e26.
This reverts commit 7a999a1.
This reverts commit f337595.

It turns out that on Windows, uv_pipe_getsockname() is a no-op for
client sockets.  It slipped through testing because of a CI snafu.

PR-URL: #2584
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
  • Loading branch information
bnoordhuis committed Aug 27, 2015
1 parent 6cd0e26 commit de88255
Show file tree
Hide file tree
Showing 8 changed files with 15 additions and 65 deletions.
25 changes: 5 additions & 20 deletions doc/api/net.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,6 @@ Example:

Don't call `server.address()` until the `'listening'` event has been emitted.

This method used to return the file path as a string for UNIX sockets and
Windows pipes. As of Node.js v4.0.0, it returns the expected object.

### server.unref()

Calling `unref` on a server will allow the program to exit if this is the only
Expand Down Expand Up @@ -511,37 +508,25 @@ Returns `socket`.
The string representation of the remote IP address. For example,
`'74.125.127.100'` or `'2001:4860:a005::68'`.

For UNIX sockets and Windows pipes, the file path the socket is connected
to. The remote address for server sockets is always `''`, the empty string.

### socket.remoteFamily

The string representation of the remote IP family. `'IPv4'` or `'IPv6'`
for TCP sockets, `'pipe'` for UNIX sockets and Windows pipes.
The string representation of the remote IP family. `'IPv4'` or `'IPv6'`.

### socket.remotePort

The numeric representation of the remote port. For example, `80` or `21`.
`undefined` for UNIX sockets and Windows pipes.
The numeric representation of the remote port. For example,
`80` or `21`.

### socket.localAddress

The string representation of the local IP address the remote client is
connecting on. For example, if you are listening on `'0.0.0.0'` and the
client connects on `'192.168.1.1'`, the value would be `'192.168.1.1'`.

For UNIX sockets and Windows pipes, the file path the socket is listening
on. The local address for client sockets is always `''`, the empty string.

### socket.localFamily

The string representation of the local IP family. `'IPv4'` or `'IPv6'`
for TCP sockets, `'pipe'` for UNIX sockets and Windows pipes.

### socket.localPort

The numeric representation of the local port. For example, `80` or `21`.
`undefined` for UNIX sockets and Windows pipes.
The numeric representation of the local port. For example,
`80` or `21`.

### socket.bytesRead

Expand Down
11 changes: 6 additions & 5 deletions lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -606,9 +606,6 @@ Socket.prototype.__defineGetter__('localAddress', function() {
return this._getsockname().address;
});

Socket.prototype.__defineGetter__('localFamily', function() {
return this._getsockname().family;
});

Socket.prototype.__defineGetter__('localPort', function() {
return this._getsockname().port;
Expand Down Expand Up @@ -1342,14 +1339,16 @@ Server.prototype.listen = function() {
else
listen(self, null, h.port | 0, 4, backlog, undefined, h.exclusive);
} else if (h.path && isPipeName(h.path)) {
listen(self, h.path, -1, -1, backlog, undefined, h.exclusive);
var pipeName = self._pipeName = h.path;
listen(self, pipeName, -1, -1, backlog, undefined, h.exclusive);
} else {
throw new Error('Invalid listen argument: ' + h);
}
}
} else if (isPipeName(arguments[0])) {
// UNIX socket or Windows pipe.
listen(self, arguments[0], -1, -1, backlog);
var pipeName = self._pipeName = arguments[0];
listen(self, pipeName, -1, -1, backlog);

} else if (arguments[1] === undefined ||
typeof arguments[1] === 'function' ||
Expand Down Expand Up @@ -1382,6 +1381,8 @@ Server.prototype.address = function() {
this._handle.getsockname(out);
// TODO(bnoordhuis) Check err and throw?
return out;
} else if (this._pipeName) {
return this._pipeName;
} else {
return null;
}
Expand Down
26 changes: 0 additions & 26 deletions src/pipe_wrap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,6 @@ void PipeWrap::Initialize(Handle<Object> target,
env->SetProtoMethod(t, "listen", Listen);
env->SetProtoMethod(t, "connect", Connect);
env->SetProtoMethod(t, "open", Open);
env->SetProtoMethod(t, "getpeername",
GetSockOrPeerName<uv_pipe_getpeername>);
env->SetProtoMethod(t, "getsockname",
GetSockOrPeerName<uv_pipe_getsockname>);

#ifdef _WIN32
env->SetProtoMethod(t, "setPendingInstances", SetPendingInstances);
Expand Down Expand Up @@ -280,28 +276,6 @@ void PipeWrap::Connect(const FunctionCallbackInfo<Value>& args) {
}


template <int (*F)(const uv_pipe_t*, char*, size_t*)>
void PipeWrap::GetSockOrPeerName(
const v8::FunctionCallbackInfo<v8::Value>& args) {
CHECK(args[0]->IsObject());
char buffer[1024];
size_t size = sizeof(buffer);
const PipeWrap* wrap = Unwrap<PipeWrap>(args.Holder());
const int err = F(&wrap->handle_, buffer, &size);
if (err == 0) {
const uint8_t* data = reinterpret_cast<const uint8_t*>(buffer);
const String::NewStringType type = String::kNormalString;
Local<String> path =
String::NewFromOneByte(args.GetIsolate(), data, type, size);
Environment* env = Environment::GetCurrent(args);
Local<Object> out = args[0].As<Object>();
out->Set(env->address_string(), path);
out->Set(env->family_string(), env->pipe_string());
}
args.GetReturnValue().Set(err);
}


} // namespace node

NODE_MODULE_CONTEXT_AWARE_BUILTIN(pipe_wrap, node::PipeWrap::Initialize)
3 changes: 0 additions & 3 deletions src/pipe_wrap.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,6 @@ class PipeWrap : public StreamWrap {
static void Connect(const v8::FunctionCallbackInfo<v8::Value>& args);
static void Open(const v8::FunctionCallbackInfo<v8::Value>& args);

template <int (*F)(const uv_pipe_t*, char*, size_t*)>
static void GetSockOrPeerName(const v8::FunctionCallbackInfo<v8::Value>&);

#ifdef _WIN32
static void SetPendingInstances(
const v8::FunctionCallbackInfo<v8::Value>& args);
Expand Down
2 changes: 1 addition & 1 deletion test/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ Object.defineProperty(exports, 'hasCrypto', {get: function() {
}});

if (exports.isWindows) {
exports.PIPE = '\\\\?\\pipe\\libuv-test';
exports.PIPE = '\\\\.\\pipe\\libuv-test';
} else {
exports.PIPE = exports.tmpDir + '/test.sock';
}
Expand Down
8 changes: 2 additions & 6 deletions test/parallel/test-cluster-http-pipe.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,8 @@ if (cluster.isMaster) {
}

http.createServer(function(req, res) {
assert.equal(req.connection.remoteAddress, '');
assert.equal(req.connection.remoteFamily, 'pipe');
assert.equal(req.connection.remotePort, undefined);
assert.equal(req.connection.localAddress, common.PIPE);
assert.equal(req.connection.localFamily, 'pipe');
assert.equal(req.connection.localPort, undefined);
assert.equal(req.connection.remoteAddress, undefined);
assert.equal(req.connection.localAddress, undefined); // TODO common.PIPE?
res.writeHead(200);
res.end('OK');
}).listen(common.PIPE, function() {
Expand Down
2 changes: 0 additions & 2 deletions test/parallel/test-http-unix-socket.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ var headers_ok = false;
var body_ok = false;

var server = http.createServer(function(req, res) {
assert.equal(req.socket.address().address, common.PIPE);
res.writeHead(200, {
'Content-Type': 'text/plain',
'Connection': 'close'
Expand All @@ -20,7 +19,6 @@ var server = http.createServer(function(req, res) {
});

server.listen(common.PIPE, function() {
assert.equal(server.address().address, common.PIPE);

var options = {
socketPath: common.PIPE,
Expand Down
3 changes: 1 addition & 2 deletions test/sequential/test-pipe-address.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,5 @@ server.listen(common.PIPE, function() {
});

process.on('exit', function() {
assert.equal(address.address, common.PIPE);
assert.equal(address.family, 'pipe');
assert.equal(address, common.PIPE);
});

0 comments on commit de88255

Please sign in to comment.