Skip to content

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

@weekens

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.

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