Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
http2: add edge case to GOAWAY request
PR-URL: #42190
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
  • Loading branch information
RafaelGSS authored and danielleadams committed Apr 24, 2022
1 parent cda623c commit ddef6bb
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
6 changes: 6 additions & 0 deletions doc/api/http2.md
Expand Up @@ -935,6 +935,12 @@ For HTTP/2 Client `Http2Session` instances only, the `http2session.request()`
creates and returns an `Http2Stream` instance that can be used to send an
HTTP/2 request to the connected server.

When a `ClientHttp2Session` is first created, the socket may not yet be
connected. if `clienthttp2session.request()` is called during this time, the
actual request will be deferred until the socket is ready to go.
If the `session` is closed before the actual request be executed, an
`ERR_HTTP2_GOAWAY_SESSION` is thrown.

This method is only available if `http2session.type` is equal to
`http2.constants.NGHTTP2_SESSION_CLIENT`.

Expand Down
22 changes: 22 additions & 0 deletions test/parallel/test-http2-goaway-delayed-request.js
@@ -0,0 +1,22 @@
'use strict';

const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');

const http2 = require('http2');

const server = http2.createServer();

server.listen(0, () => {
const client = http2.connect(`http://localhost:${server.address().port}`);
client.on('close', common.mustCall(() => {
server.close();
}));

// The client.close() is executed before the socket is able to make request
const stream = client.request();
stream.on('error', common.expectsError({ code: 'ERR_HTTP2_GOAWAY_SESSION' }));

setImmediate(() => client.close());
});

0 comments on commit ddef6bb

Please sign in to comment.