diff --git a/doc/api/child_process.md b/doc/api/child_process.md index 17d54e7f7e844f..6ea104e23956c5 100644 --- a/doc/api/child_process.md +++ b/doc/api/child_process.md @@ -1141,8 +1141,9 @@ handle connections with "normal" or "special" priority: const normal = require('child_process').fork('child.js', ['normal']); const special = require('child_process').fork('child.js', ['special']); -// Open up the server and send sockets to child -const server = require('net').createServer(); +// Open up the server and send sockets to child. Use pauseOnConnect to prevent +// the sockets from being read before they are sent to the child process. +const server = require('net').createServer({ pauseOnConnect: true }); server.on('connection', (socket) => { // If this is special priority @@ -1162,7 +1163,12 @@ to the event callback function: ```js process.on('message', (m, socket) => { if (m === 'socket') { - socket.end(`Request handled with ${process.argv[2]} priority`); + if (socket) { + // Check that the client socket exists. + // It is possible for the socket to be closed between the time it is + // sent and the time it is received in the child process. + socket.end(`Request handled with ${process.argv[2]} priority`); + } } }); ``` @@ -1172,6 +1178,10 @@ tracking when the socket is destroyed. To indicate this, the `.connections` property becomes `null`. It is recommended not to use `.maxConnections` when this occurs. +It is also recommended that any `'message'` handlers in the child process +verify that `socket` exists, as the connection may have been closed during the +time it takes to send the connection to the child. + *Note*: This function uses [`JSON.stringify()`][] internally to serialize the `message`.