node-continuation-local-storage
node-continuation-local-storage copied to clipboard
net-events 'close' not preserving state
If I modify net-events.tap.js to have the server do socket.destroy() rather than a socket.end(), I get a 'close' event in the client that does not get the client.write cls. Should the 'close' event preserve the cls state? Thank you.
Here is the modified net-events.tap.js
'use strict';
var net = require('net')
, tap = require('tap')
, test = tap.test
, createNamespace = require('../context').createNamespace
;
test("continuation-local state with net connection", function (t) {
t.plan(4);
var namespace = createNamespace('net');
namespace.run(function () {
namespace.set('test', 0xabad1dea);
var server;
namespace.run(function () {
namespace.set('test', 0x1337);
server = net.createServer(function (socket) {
t.equal(namespace.get('test'), 0x1337, "state has been mutated");
socket.on("data", function () {
t.equal(namespace.get('test'), 0x1337, "state is still preserved");
socket.destroy(); // DESTROY RATHER THAN END
server.close();
// socket.end("GoodBye");
});
});
server.listen(function () {
var address = server.address();
namespace.run(function () {
namespace.set("test", "MONKEY");
var client = net.connect(address.port, function () {
t.equal(namespace.get("test"), "MONKEY",
"state preserved for client connection");
client.write("Hello");
client.on("data", function () {
t.equal(namespace.get("test"), "MONKEY", "state preserved for client data");
});
client.on("close", function () { // CLOSE EVENT NOT GETTING CLS STATE
t.equal(namespace.get("test"), "MONKEY", "state preserved for client close");
t.end();
});
});
});
});
});
});
});
I'll need to do some investigation to figure out if this is a problem with CLS or the underlying asyncListener API, but until I have a chance to do that, what's the use case here? Why would you be calling .destroy()
from your code?
The use case is a custom-protocol server with clients (that we do not write) that close the socket at any point in any way. I call .destroy() only from test to simulate "at any point in any way" and generate the 'close' event that the server occasionally sees. Thank you.
On Feb 7, 2014, at 11:36 PM, Forrest L Norvell [email protected] wrote:
I'll need to do some investigation to figure out if this is a problem with CLS or the underlying asyncListener API, but until I have a chance to do that, what's the use case here? Why would you be calling .destroy() from your code?
— Reply to this email directly or view it on GitHub.