mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
net: use cached peername to resolve remote fields
Allows socket.remote* properties to still be accessed even after the socket is closed. Fixes: https://github.com/joyent/node/issues/9287 PR-URL: https://github.com/joyent/node/pull/9366 Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
e6e616fdcb
commit
30666f22ca
@ -556,10 +556,10 @@ function onread(nread, buffer) {
|
|||||||
|
|
||||||
|
|
||||||
Socket.prototype._getpeername = function() {
|
Socket.prototype._getpeername = function() {
|
||||||
if (!this._handle || !this._handle.getpeername) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
if (!this._peername) {
|
if (!this._peername) {
|
||||||
|
if (!this._handle || !this._handle.getpeername) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
var out = {};
|
var out = {};
|
||||||
var err = this._handle.getpeername(out);
|
var err = this._handle.getpeername(out);
|
||||||
if (err) return {}; // FIXME(bnoordhuis) Throw?
|
if (err) return {}; // FIXME(bnoordhuis) Throw?
|
||||||
@ -865,6 +865,7 @@ Socket.prototype.connect = function(options, cb) {
|
|||||||
this._writableState.errorEmitted = false;
|
this._writableState.errorEmitted = false;
|
||||||
this.destroyed = false;
|
this.destroyed = false;
|
||||||
this._handle = null;
|
this._handle = null;
|
||||||
|
this._peername = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
@ -20,6 +20,10 @@ var server = net.createServer(function(socket) {
|
|||||||
socket.on('end', function() {
|
socket.on('end', function() {
|
||||||
if (++conns_closed == 2) server.close();
|
if (++conns_closed == 2) server.close();
|
||||||
});
|
});
|
||||||
|
socket.on('close', function() {
|
||||||
|
assert.notEqual(-1, remoteAddrCandidates.indexOf(socket.remoteAddress));
|
||||||
|
assert.notEqual(-1, remoteFamilyCandidates.indexOf(socket.remoteFamily));
|
||||||
|
});
|
||||||
socket.resume();
|
socket.resume();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -32,12 +36,20 @@ server.listen(common.PORT, 'localhost', function() {
|
|||||||
assert.equal(common.PORT, client.remotePort);
|
assert.equal(common.PORT, client.remotePort);
|
||||||
client.end();
|
client.end();
|
||||||
});
|
});
|
||||||
|
client.on('close', function() {
|
||||||
|
assert.notEqual(-1, remoteAddrCandidates.indexOf(client.remoteAddress));
|
||||||
|
assert.notEqual(-1, remoteFamilyCandidates.indexOf(client.remoteFamily));
|
||||||
|
});
|
||||||
client2.on('connect', function() {
|
client2.on('connect', function() {
|
||||||
assert.notEqual(-1, remoteAddrCandidates.indexOf(client2.remoteAddress));
|
assert.notEqual(-1, remoteAddrCandidates.indexOf(client2.remoteAddress));
|
||||||
assert.notEqual(-1, remoteFamilyCandidates.indexOf(client2.remoteFamily));
|
assert.notEqual(-1, remoteFamilyCandidates.indexOf(client2.remoteFamily));
|
||||||
assert.equal(common.PORT, client2.remotePort);
|
assert.equal(common.PORT, client2.remotePort);
|
||||||
client2.end();
|
client2.end();
|
||||||
});
|
});
|
||||||
|
client2.on('close', function() {
|
||||||
|
assert.notEqual(-1, remoteAddrCandidates.indexOf(client2.remoteAddress));
|
||||||
|
assert.notEqual(-1, remoteFamilyCandidates.indexOf(client2.remoteFamily));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
process.on('exit', function() {
|
process.on('exit', function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user