diff --git a/streamer/src/streamer.rs b/streamer/src/streamer.rs index 9f7db9c546..004c584642 100644 --- a/streamer/src/streamer.rs +++ b/streamer/src/streamer.rs @@ -3,8 +3,9 @@ use { crate::{ - packet::{self, send_to, PacketBatch, PacketBatchRecycler, PACKETS_PER_BATCH}, + packet::{self, PacketBatch, PacketBatchRecycler, PACKETS_PER_BATCH}, recvmmsg::NUM_RCVMMSGS, + sendmmsg::{batch_send, SendPktsError}, socket::SocketAddrSpace, }, solana_sdk::timing::timestamp, @@ -34,6 +35,9 @@ pub enum StreamerError { #[error("send packets error")] Send(#[from] SendError), + + #[error(transparent)] + SendPktsError(#[from] SendPktsError), } pub type Result = std::result::Result; @@ -126,7 +130,13 @@ fn recv_send( ) -> Result<()> { let timer = Duration::new(1, 0); let packet_batch = r.recv_timeout(timer)?; - send_to(&packet_batch, sock, socket_addr_space)?; + let packets = packet_batch.packets.iter().filter_map(|pkt| { + let addr = pkt.meta.addr(); + socket_addr_space + .check(&addr) + .then(|| (&pkt.data[..pkt.meta.size], addr)) + }); + batch_send(sock, &packets.collect::>())?; Ok(()) }