// Flags: --expose_internals 'use strict'; const common = require('../common'); const assert = require('assert'); const { fork } = require('child_process'); const http = require('http'); if (process.argv[2] === 'child') { process.once('message', (req, socket) => { const res = new http.ServerResponse(req); res.assignSocket(socket); res.end(); }); process.send('ready'); return; } const { kTimeout } = require('internal/timers'); let child; let socket; const server = http.createServer(common.mustCall((req, res) => { const r = { method: req.method, headers: req.headers, path: req.path, httpVersionMajor: req.httpVersionMajor, query: req.query, }; socket = res.socket; child.send(r, socket); server.close(); })); server.listen(0, common.mustCall(() => { child = fork(__filename, [ 'child' ]); child.once('message', (msg) => { assert.strictEqual(msg, 'ready'); const req = http.request({ port: server.address().port, }, common.mustCall((res) => { res.on('data', () => {}); res.on('end', common.mustCall(() => { assert.strictEqual(socket[kTimeout], null); assert.strictEqual(socket.parser, null); assert.strictEqual(socket._httpMessage, null); })); })); req.end(); }); }));