@@ -242,7 +242,9 @@ export class SolidisRequester {
242242 return socket ;
243243 }
244244
245- async #waitForSocketDrain( ) : Promise < void > {
245+ async #waitForSocketDrain(
246+ connectionTimeoutId : NodeJS . Timeout ,
247+ ) : Promise < void > {
246248 const socket = this . #getSocketOrThrow( ) ;
247249
248250 return new Promise < void > ( ( resolve ) => {
@@ -254,6 +256,7 @@ export class SolidisRequester {
254256
255257 const onDrain = ( ) => {
256258 clearTimeout ( drainTimeoutId ) ;
259+ clearTimeout ( connectionTimeoutId ) ;
257260
258261 resolve ( ) ;
259262 } ;
@@ -265,27 +268,29 @@ export class SolidisRequester {
265268 #getSocketWriteEventHandlers( ) {
266269 const socket = this . #getSocketOrThrow( ) ;
267270
271+ const timeoutId = setTimeout ( ( ) => {
272+ handlers . isError = true ;
273+ handlers . error = new SolidisRequesterError ( 'Socket timed out' ) ;
274+ } , this . #options. socketWriteTimeout ) ;
275+
268276 const handlers : SolidisSocketWriteEventHandlers = {
269277 onError : ( error : Error ) => {
270278 handlers . isError = true ;
271279 handlers . error = error ;
272280
273281 clearTimeout ( timeoutId ) ;
274282 } ,
275- waitForDrain : ( ) => this . #waitForSocketDrain( ) ,
283+ waitForDrain : ( ) => this . #waitForSocketDrain( timeoutId ) ,
276284 removeEventListeners : ( ) => {
277285 socket . removeListener ( 'error' , handlers . onError ) ;
278286 socket . removeListener ( 'close' , handlers . onError ) ;
287+
288+ clearTimeout ( timeoutId ) ;
279289 } ,
280290 isError : false ,
281291 error : null ,
282292 } ;
283293
284- const timeoutId = setTimeout ( ( ) => {
285- handlers . isError = true ;
286- handlers . error = new SolidisRequesterError ( 'Socket timed out' ) ;
287- } , this . #options. socketWriteTimeout ) ;
288-
289294 socket . once ( 'error' , handlers . onError ) ;
290295 socket . once ( 'close' , handlers . onError ) ;
291296
0 commit comments