@@ -101,7 +101,7 @@ impl Discv4Config {
101101 pub fn resolve_external_ip_interval ( & self ) -> Option < ResolveNatInterval > {
102102 let resolver = self . external_ip_resolver ?;
103103 let interval = self . resolve_external_ip_interval ?;
104- Some ( ResolveNatInterval :: interval ( resolver, interval) )
104+ Some ( ResolveNatInterval :: interval_at ( resolver, tokio :: time :: Instant :: now ( ) , interval) )
105105 }
106106}
107107
@@ -336,4 +336,25 @@ mod tests {
336336 . enable_lookup ( true )
337337 . build ( ) ;
338338 }
339+
340+ #[ tokio:: test]
341+ async fn test_resolve_external_ip_interval_uses_interval_at ( ) {
342+ use reth_net_nat:: NatResolver ;
343+ use std:: net:: { IpAddr , Ipv4Addr } ;
344+
345+ let ip_addr = IpAddr :: V4 ( Ipv4Addr :: new ( 192 , 168 , 1 , 1 ) ) ;
346+
347+ // Create a config with external IP resolver
348+ let mut builder = Discv4Config :: builder ( ) ;
349+ builder. external_ip_resolver ( Some ( NatResolver :: ExternalIp ( ip_addr) ) ) ;
350+ builder. resolve_external_ip_interval ( Some ( Duration :: from_secs ( 60 * 5 ) ) ) ;
351+ let config = builder. build ( ) ;
352+
353+ // Get the ResolveNatInterval
354+ let mut interval = config. resolve_external_ip_interval ( ) . expect ( "should have interval" ) ;
355+
356+ // Test that first tick returns immediately (interval_at behavior)
357+ let ip = interval. tick ( ) . await ;
358+ assert_eq ! ( ip, Some ( ip_addr) ) ;
359+ }
339360}
0 commit comments