@@ -82,9 +82,11 @@ lws_client_h3_grace_cb(lws_sorted_usec_list_t *sul)
8282
8383 /* Mark H3 as FAILED in cache with 5s TTL */
8484 if (wsi -> a .context -> h3_cap_cache && wsi -> stash && wsi -> stash -> cis [CIS_HOST ]) {
85- lws_h3_state_t state = LWS_H3_STATE_FAILED_IGNORE ;
85+ lws_h3_cap_info_t cap ;
86+ memset (& cap , 0 , sizeof (cap ));
87+ cap .state = LWS_H3_STATE_FAILED_IGNORE ;
8688 lws_cache_write_through (wsi -> a .context -> h3_cap_cache , wsi -> stash -> cis [CIS_HOST ],
87- (const uint8_t * )& state , sizeof (state ),
89+ (const uint8_t * )& cap , sizeof (cap ),
8890 lws_now_usecs () + (5000000ll ), NULL );
8991 }
9092
@@ -1005,14 +1007,17 @@ lws_client_connect_3_connect(struct lws *wsi, const char *ads,
10051007 return wsi ;
10061008 } else if (!is_parallel && wsi -> role_ops && !strcmp (wsi -> role_ops -> name , "quic" )) {
10071009 /* QUIC connect immediately succeeds. Schedule grace and happy eyeballs. */
1008- uint32_t grace_us = 200000 ;
1010+ uint32_t grace_us = LWS_QUIC_GRACE_DEFAULT_US ;
10091011 if (wsi -> a .context -> h3_cap_cache && wsi -> stash && wsi -> stash -> cis [CIS_HOST ]) {
10101012 const void * item = NULL ;
10111013 size_t item_len = 0 ;
1012- if (!lws_cache_item_get (wsi -> a .context -> h3_cap_cache , wsi -> stash -> cis [CIS_HOST ], & item , & item_len )) {
1013- lws_h3_state_t state = * (lws_h3_state_t * )item ;
1014- if (state == LWS_H3_STATE_KNOWN_GOOD || state == LWS_H3_STATE_HTTPS_RECORD_EXISTS )
1015- grace_us = 3000000 ;
1014+ if (!lws_cache_item_get (wsi -> a .context -> h3_cap_cache , wsi -> stash -> cis [CIS_HOST ], & item , & item_len ) &&
1015+ item_len == sizeof (lws_h3_cap_info_t )) {
1016+ const lws_h3_cap_info_t * cap = (const lws_h3_cap_info_t * )item ;
1017+ if (cap -> state == LWS_H3_STATE_KNOWN_GOOD )
1018+ grace_us = cap -> latency_us + LWS_QUIC_GRACE_MARGIN_US ;
1019+ else if (cap -> state == LWS_H3_STATE_HTTPS_RECORD_EXISTS )
1020+ grace_us = LWS_QUIC_GRACE_DEFAULT_US ;
10161021 }
10171022 }
10181023 lwsl_wsi_notice (wsi , "QUIC socket created, starting grace timer %uus" , (unsigned int )grace_us );
0 commit comments