Skip to content

net-events 'close' not preserving state #19

Open
@ericwaldheim

Description

@ericwaldheim

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();
            });

          });
        });
      });
    });
  });
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions