Skip to content

Commit a72c1da

Browse files
authored
fix(net): resolve external ip on startup (paradigmxyz#19852)
1 parent 65f72e3 commit a72c1da

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

crates/net/discv4/src/config.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)