@@ -1107,8 +1107,7 @@ async function connect (client) {
11071107
11081108 assert ( socket )
11091109
1110- const isH2 = socket . alpnProtocol === 'h2'
1111- if ( isH2 ) {
1110+ if ( socket . alpnProtocol === 'h2' ) {
11121111 if ( ! h2ExperimentalWarned ) {
11131112 h2ExperimentalWarned = true
11141113 process . emitWarning ( 'H2 support is experimental, expect them to change at any time.' , {
@@ -1122,32 +1121,30 @@ async function connect (client) {
11221121 } )
11231122
11241123 client [ kHTTPConnVersion ] = 'h2'
1125- session . on ( 'error' , err => {
1124+ session . on ( 'error' , function ( err ) {
11261125 assert ( err . code !== 'ERR_TLS_CERT_ALTNAME_INVALID' )
11271126
1128- session [ kError ] = err
1127+ this [ kError ] = err
11291128
1130- onError ( session [ kClient ] , err )
1129+ onError ( this [ kClient ] , err )
11311130 } )
1132- session . on ( 'frameError' , ( type , code , id ) => {
1131+ session . on ( 'frameError' , function ( type , code , id ) {
11331132 if ( id === 0 ) {
11341133 const err = new InformationalError ( `HTTP/2: "frameError" received - type ${ type } , code ${ code } ` )
1135- util . destroy ( session , err )
1134+ util . destroy ( this , err )
11361135 util . destroy ( socket , err )
11371136 }
11381137 } )
1139- session . on ( 'end' , ( ) => {
1138+ session . on ( 'end' , function ( ) {
11401139 const err = new SocketError ( 'other side closed' )
1141- util . destroy ( session , err )
1140+ util . destroy ( this , err )
11421141 util . destroy ( socket , err )
11431142 } )
1144- session . on ( 'goaway' , ( code ) => {
1145- // TODO (fix): How is this different from onSOcketClose?
1146-
1147- session [ kError ] = new InformationalError ( `HTTP/2: "GOAWAY" frame received with code ${ code } ` )
1148-
1143+ session . on ( 'goaway' , function ( code ) {
1144+ this [ kError ] = new InformationalError ( `HTTP/2: "GOAWAY" frame received with code ${ code } ` )
11491145 onSocketClose . call ( session )
11501146 } )
1147+ session . on ( 'close' , onSocketClose )
11511148 session . unref ( )
11521149
11531150 client [ kSocket ] = session
@@ -1157,15 +1154,15 @@ async function connect (client) {
11571154 llhttpPromise = null
11581155 }
11591156
1160- const parser = new Parser ( client , socket , llhttpInstance )
1161-
11621157 socket [ kNoRef ] = false
11631158 socket [ kWriting ] = false
11641159 socket [ kReset ] = false
11651160 socket [ kBlocking ] = false
1166- socket [ kParser ] = parser
1161+ socket [ kParser ] = new Parser ( client , socket , llhttpInstance )
1162+
1163+ addListener ( socket , 'error' , function ( err ) {
1164+ const { [ kParser ] : parser } = this
11671165
1168- addListener ( socket , 'error' , err => {
11691166 // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded
11701167 // to the user.
11711168 if ( err . code === 'ECONNRESET' && parser . statusCode && ! parser . shouldKeepAlive ) {
@@ -1181,30 +1178,37 @@ async function connect (client) {
11811178 onError ( this [ kClient ] , err )
11821179 } )
11831180
1184- addListener ( socket , 'readable' , ( ) => {
1181+ addListener ( socket , 'readable' , function ( ) {
1182+ const { [ kParser ] : parser } = this
1183+
11851184 if ( parser ) {
11861185 parser . readMore ( )
11871186 }
11881187 } )
11891188
1190- addListener ( socket , 'end' , ( ) => {
1189+ addListener ( socket , 'end' , function ( ) {
1190+ const { [ kParser ] : parser } = this
1191+
11911192 if ( parser && parser . statusCode && ! parser . shouldKeepAlive ) {
11921193 // We treat all incoming data so far as a valid response.
11931194 parser . onMessageComplete ( )
1194- return
1195+ } else {
1196+ util . destroy ( this , new SocketError ( 'other side closed' , util . getSocketInfo ( this ) ) )
11951197 }
1196-
1197- util . destroy ( this , new SocketError ( 'other side closed' , util . getSocketInfo ( this ) ) )
11981198 } )
11991199
1200- addListener ( socket , 'close' , ( ) => {
1201- if ( ! socket [ kError ] && parser . statusCode && ! parser . shouldKeepAlive ) {
1200+ addListener ( socket , 'close' , function ( ) {
1201+ const { [ kParser ] : parser } = this
1202+
1203+ if ( ! this [ kError ] && parser . statusCode && ! parser . shouldKeepAlive ) {
12021204 // We treat all incoming data so far as a valid response.
12031205 parser . onMessageComplete ( )
12041206 }
12051207
1206- socket [ kParser ] . destroy ( )
1207- socket [ kParser ] = null
1208+ this [ kParser ] . destroy ( )
1209+ this [ kParser ] = null
1210+
1211+ onSocketClose ( )
12081212 } )
12091213
12101214 client [ kSocket ] = socket
@@ -1215,8 +1219,6 @@ async function connect (client) {
12151219 socket [ kClient ] = client
12161220 socket [ kError ] = null
12171221
1218- addListener ( socket , 'close' , onSocketClose )
1219-
12201222 if ( channels . connected . hasSubscribers ) {
12211223 channels . connected . publish ( {
12221224 connectParams : {
0 commit comments