Closed
Description
The following issue was found while working against a CouchDB changes stream which uses a newline \n
as a form of a heartbeat on a long polling connection.
OS: MacOS, Node 14.6
Will invoke kOnTimeout
after kOnHeadersComplete
. Also will stop invoking kOnExecute
but will keep invoking kOnBody
.
Refs: nodejs/undici#268
Refs: nodejs/undici#269
const net = require('net')
const { HTTPParser } = process.binding('http_parser') // eslint-disable-line
net.createServer(socket => {
socket.write('HTTP/1.1 200 OK\r\n')
socket.write('Transfer-Encoding: chunked\r\n\r\n')
setInterval(() => {
socket.write('1\r\n')
socket.write('\n\r\n')
}, 500)
}).listen(3111)
const socket = net.connect(3111, '127.0.0.1')
const parser = new HTTPParser(HTTPParser.RESPONSE, false)
parser.initialize(
HTTPParser.RESPONSE,
{},
0,
false,
1e3
)
parser[HTTPParser.kOnTimeout] = () => {
console.log('kOnTimeout')
}
parser[HTTPParser.kOnHeaders] = (rawHeaders) => {
console.log('kOnHeaders')
}
parser[HTTPParser.kOnExecute] = (ret) => {
console.log('kOnExecute')
}
parser[HTTPParser.kOnHeadersComplete] = (versionMajor, versionMinor, rawHeaders, method,
url, statusCode, statusMessage, upgrade, shouldKeepAlive) => {
console.log('kOnHeadersComplete')
}
parser[HTTPParser.kOnBody] = (chunk, offset, length) => {
console.log('kOnBody')
}
parser[HTTPParser.kOnMessageComplete] = () => {
console.log('kOnMessageComplete')
}
parser.consume(socket._handle)