From 9ddeadc2bae408bbb4a8bc12c75eb32c6076e371 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 23 Jun 2022 03:19:39 +0200 Subject: [PATCH] Handle accept() that can fail for Prometheus, too --- src/metrics.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/metrics.rs b/src/metrics.rs index 20a3993..9f9170b 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -55,7 +55,16 @@ pub async fn prometheus_service( let stream = TcpListener::bind(metrics_config.listen_addr).await?; let concurrent_connections = Arc::new(AtomicU32::new(0)); loop { - let (client, _client_addr) = stream.accept().await?; + let (client, _client_addr) = match stream.accept().await { + Ok(x) => x, + Err(e) => { + if e.kind() == std::io::ErrorKind::WouldBlock { + continue; + } + warn!("Error accepting Prometheus connection: {}", e); + continue; + } + }; let count = concurrent_connections.fetch_add(1, Ordering::Relaxed); if count >= METRICS_MAX_CONCURRENT_CONNECTIONS { concurrent_connections.fetch_sub(1, Ordering::Relaxed);