diff --git a/aquatic_udp/src/workers/socket/responses.rs b/aquatic_udp/src/workers/socket/responses.rs index 92a7b5c..6ed78d1 100644 --- a/aquatic_udp/src/workers/socket/responses.rs +++ b/aquatic_udp/src/workers/socket/responses.rs @@ -76,69 +76,68 @@ fn send_response( ) { let mut cursor = Cursor::new(buffer); - match response.write(&mut cursor) { - Ok(()) => { - let amt = cursor.position() as usize; + if let Err(err) = response.write(&mut cursor) { + ::log::error!("Converting response to bytes failed: {:#}", err); - let canonical_addr_is_ipv4 = canonical_addr.is_ipv4(); + return; + } - let addr = if config.network.address.is_ipv4() { - canonical_addr - .get_ipv4() - .expect("found peer ipv6 address while running bound to ipv4 address") + let bytes_written = cursor.position() as usize; + + let addr = if config.network.address.is_ipv4() { + canonical_addr + .get_ipv4() + .expect("found peer ipv6 address while running bound to ipv4 address") + } else { + canonical_addr.get_ipv6_mapped() + }; + + match socket.send_to(&cursor.get_ref()[..bytes_written], addr) { + Ok(amt) if config.statistics.active() => { + let stats = if canonical_addr.is_ipv4() { + &state.statistics_ipv4 } else { - canonical_addr.get_ipv6_mapped() + &state.statistics_ipv6 }; - match socket.send_to(&cursor.get_ref()[..amt], addr) { - Ok(amt) if config.statistics.active() => { - let stats = if canonical_addr_is_ipv4 { - &state.statistics_ipv4 - } else { - &state.statistics_ipv6 - }; + stats.bytes_sent.fetch_add(amt, Ordering::Relaxed); - stats.bytes_sent.fetch_add(amt, Ordering::Relaxed); - - match response { - Response::Connect(_) => { - stats.responses_sent_connect.fetch_add(1, Ordering::Relaxed); - } - Response::AnnounceIpv4(_) | Response::AnnounceIpv6(_) => { - stats - .responses_sent_announce - .fetch_add(1, Ordering::Relaxed); - } - Response::Scrape(_) => { - stats.responses_sent_scrape.fetch_add(1, Ordering::Relaxed); - } - Response::Error(_) => { - stats.responses_sent_error.fetch_add(1, Ordering::Relaxed); - } - } + match response { + Response::Connect(_) => { + stats.responses_sent_connect.fetch_add(1, Ordering::Relaxed); + } + Response::AnnounceIpv4(_) | Response::AnnounceIpv6(_) => { + stats + .responses_sent_announce + .fetch_add(1, Ordering::Relaxed); + } + Response::Scrape(_) => { + stats.responses_sent_scrape.fetch_add(1, Ordering::Relaxed); + } + Response::Error(_) => { + stats.responses_sent_error.fetch_add(1, Ordering::Relaxed); } - Ok(_) => (), - Err(err) => match resend_buffer { - Some(resend_buffer) - if (err.raw_os_error() == Some(ENOBUFS)) - || (err.kind() == ErrorKind::WouldBlock) => - { - if resend_buffer.len() < config.network.resend_buffer_max_len { - ::log::info!("Adding response to resend queue, since sending it to {} failed with: {:#}", addr, err); - - resend_buffer.push((response, canonical_addr)); - } else { - ::log::warn!("Response resend buffer full, dropping response"); - } - } - _ => { - ::log::warn!("Sending response to {} failed: {:#}", addr, err); - } - }, } } + Ok(_) => (), Err(err) => { - ::log::error!("Converting response to bytes failed: {:#}", err); + match resend_buffer { + Some(resend_buffer) + if (err.raw_os_error() == Some(ENOBUFS)) + || (err.kind() == ErrorKind::WouldBlock) => + { + if resend_buffer.len() < config.network.resend_buffer_max_len { + ::log::info!("Adding response to resend queue, since sending it to {} failed with: {:#}", addr, err); + + resend_buffer.push((response, canonical_addr)); + } else { + ::log::warn!("Response resend buffer full, dropping response"); + } + } + _ => { + ::log::warn!("Sending response to {} failed: {:#}", addr, err); + } + } } } }