@@ -53,6 +53,26 @@ async function setup(opts, cb) {
5353 cb ( { engine, h3Server, certificate } ) ;
5454}
5555
56+ function createHttpServer ( port ) {
57+ const httpServer = createServer ( ) ;
58+
59+ let retryCount = 0 ;
60+
61+ return new Promise ( ( resolve , reject ) => {
62+ httpServer . listen ( port , ( ) => resolve ( httpServer ) ) ;
63+
64+ httpServer . on ( "error" , ( e ) => {
65+ if ( e . code === "EADDRINUSE" && ++ retryCount <= 3 ) {
66+ console . warn ( "port already in use, retrying..." ) ;
67+ setTimeout ( ( ) => {
68+ httpServer . listen ( port , ( ) => resolve ( httpServer ) ) ;
69+ } , 100 ) ;
70+ }
71+ reject ( e ) ;
72+ } ) ;
73+ } ) ;
74+ }
75+
5676function success ( engine , h3server , done ) {
5777 engine . close ( ) ;
5878 h3server . stopServer ( ) ;
@@ -98,10 +118,9 @@ describe("WebTransport", () => {
98118 {
99119 transports : [ "polling" , "webtransport" ] ,
100120 } ,
101- ( { engine, h3Server, certificate } ) => {
102- const httpServer = createServer ( ) ;
121+ async ( { engine, h3Server, certificate } ) => {
122+ const httpServer = await createHttpServer ( h3Server . port ) ;
103123 engine . attach ( httpServer ) ;
104- httpServer . listen ( h3Server . port ) ;
105124
106125 const socket = createSocket ( h3Server . port , certificate , {
107126 transports : [ "polling" , "webtransport" ] ,
@@ -120,10 +139,9 @@ describe("WebTransport", () => {
120139 {
121140 transports : [ "polling" , "websocket" , "webtransport" ] ,
122141 } ,
123- ( { engine, h3Server, certificate } ) => {
124- const httpServer = createServer ( ) ;
142+ async ( { engine, h3Server, certificate } ) => {
143+ const httpServer = await createHttpServer ( h3Server . port ) ;
125144 engine . attach ( httpServer ) ;
126- httpServer . listen ( h3Server . port ) ;
127145
128146 const socket = createSocket ( h3Server . port , certificate , {
129147 transports : [ "polling" , "websocket" , "webtransport" ] ,
0 commit comments