diff --git a/packages/grpc-js/src/transport.ts b/packages/grpc-js/src/transport.ts index c32b5b3d..47f6105d 100644 --- a/packages/grpc-js/src/transport.ts +++ b/packages/grpc-js/src/transport.ts @@ -723,28 +723,29 @@ export class Http2SubchannelConnector implements SubchannelConnector { } }); - // Send WINDOW_UPDATE now to avoid 65 KB start-window stall. + // Prepare window size configuration for remoteSettings handler const defaultWin = http2.getDefaultSettings().initialWindowSize ?? 65535; // 65 535 B const connWin = options[ 'grpc-node.flow_control_window' ] as number | undefined; - - if (connWin && connWin > defaultWin) { - try { - // Node ≥ 14.18 - (session as any).setLocalWindowSize(connWin); - } catch { - // Older Node: bump by the delta - const delta = connWin - (session.state.localWindowSize ?? defaultWin); - if (delta > 0) (session as any).incrementWindowSize(delta); - } - } this.session = session; let errorMessage = 'Failed to connect'; let reportedError = false; session.unref(); session.once('remoteSettings', () => { + // Send WINDOW_UPDATE now to avoid 65 KB start-window stall. + if (connWin && connWin > defaultWin) { + try { + // Node ≥ 14.18 + (session as any).setLocalWindowSize(connWin); + } catch { + // Older Node: bump by the delta + const delta = connWin - (session.state.localWindowSize ?? defaultWin); + if (delta > 0) (session as any).incrementWindowSize(delta); + } + } + session.removeAllListeners(); secureConnectResult.socket.removeListener('close', closeHandler); secureConnectResult.socket.removeListener('error', errorHandler);