Skip to content

Cannot reuse a TLS socket for a HTTP2 session #33343

@szmarczak

Description

@szmarczak

What steps will reproduce the bug?

const http2 = require('http2');
const tls = require('tls');

const options = {
  ALPNProtocols: ['h2'],
  host: 'nghttp2.org',
  servername: 'nghttp2.org',
  port: 443,
  settings: {}
};

tls._connect = tls.connect;

/*
tls.connect = (...args) => {
    console.log(...args, args[1].toString());
    return tls._connect(...args);
};
*/

const socket = tls._connect(options, () => {
    console.log('Connected!');
    const session = http2.connect('https://nghttp2.org', {
        createConnection: () => socket
    });

    session.once('remoteSettings', () => {
        console.log('Received remote settings!');
    });
});

How often does it reproduce? Is there a required condition?

Always.

What is the expected behavior?

Connected!
Received remote settings!

What do you see instead?

Connected!

Additional information

Reference: #16256

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions