Skip to content

net.Server 'connection' callback not invoked after passing handle to forked process #13740

Description

@weekens

I have a test that involves net.Server socket handle transferring functionality (the socket is passed to a forked process). What the test does is:

  1. Creates a TCP server listening on port 8889.
  2. Creates a forked process.
  3. Passes a created TCP server handle to a forked process. The process listens for the 'connection' event on received handle. Upon connection it sends a 'Hello!' message to a connected socket and closes the connection.
  4. Connects with a TCP client to port 8889 and awaits data.
  5. Ensures that the data is 'Hello!', closes the server and kills forked process.

The test fails quite often in an interesting way: a client receives a 'connect' callback, but the forked process does not receive a 'connection' callback, and the test fails with timeout.

I have extracted all my project-related stuff from that test and came up with this small project that reproduces the issue: https://github.com/weekens/nodejs-handle-issue

You can launch the test with the following:

npm install
npm test

The test is repeated 100 times, but on my machine few single launches are enough to reproduce the issue.

The tests produce debug ouput to make it more clear what's happening there.

If I'm doing something wrong in this test - please let me know.

Activity

  1. added
    clusterIssues and PRs related to the cluster subsystem.
    netIssues and PRs related to the net subsystem.
    on Jun 17, 2017
  2. addaleax commented on Jun 17, 2017

    @addaleax
    Member
  3. bnoordhuis commented on Jun 19, 2017

    @bnoordhuis
    Member

    You don't close the server handle after it's been received by the child, do you? If the server socket is alive in both processes, an incoming connection can end up in either one (and that's by design, it's not a bug.)

  4. weekens commented on Jun 19, 2017

    @weekens
    Author

    @bnoordhuis , yor're right! That was the reason of failure. Thanks a lot!

    (Fixed test, now it works).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    clusterIssues and PRs related to the cluster subsystem.netIssues and PRs related to the net subsystem.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions