Cluster: fix shared handles on Windows
authorAlexis Campailla <alexis@janeasystems.com>
Thu, 24 Jul 2014 09:59:00 +0000 (11:59 +0200)
committerFedor Indutny <fedor@indutny.com>
Thu, 7 Aug 2014 11:03:54 +0000 (15:03 +0400)
commit7ca4fa56d054926873e22f390f9ddc97e3182e3e
tree3c9db1c0bfbfe3570188af008e2a82bd30400179
parente49429ebd2fe0b7c24e2ee533311dd97f6febd1f
Cluster: fix shared handles on Windows

This is the Node side of the fix for Node's cluster module on Windows.
https://github.com/joyent/node/issues/7691

The other required part is
https://github.com/joyent/libuv/pull/1384

Windows and Unix return certain socket errors (i.e. EADDRINUSE) at
different times: bind on Windows, and listen on Unix.
In an effort to hide this difference, libuv on Windows stores such
errors in the bind_error field of uv_tcp_t, to defer raising it at
listen time.
This worked fine except for the case in which a socket is shared in
a Node cluster and a bind error occurs.

A previous attempt to fix this (
https://github.com/joyent/libuv/commit/d1e6be1460f555a1f8a4063d7642696aa7238769
https://github.com/joyent/node/commit/3da36fe00e5d85414031ae812e473f16629d8645
) was flawed becaused in an attempt to relay the error at the JS level
it caused the master to start accepting connections.

With this new approach, libuv itself is relaying the bind errors,
providing for a uniform behavior of uv_tcp_listen.

Reviewed-By: Fedor Indutny <fedor@indutny.com>
lib/net.js