Skip to content

Commit

Permalink
uses sendmmsg in streamer (solana-labs#23062)
Browse files Browse the repository at this point in the history
  • Loading branch information
behzadnouri authored Feb 11, 2022
1 parent 34443a2 commit c078ca3
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions streamer/src/streamer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},
crossbeam_channel::{Receiver, RecvTimeoutError, SendError, Sender},
Expand Down Expand Up @@ -37,6 +38,9 @@ pub enum StreamerError {

#[error("send packets error")]
Send(#[from] SendError<PacketBatch>),

#[error(transparent)]
SendPktsError(#[from] SendPktsError),
}

pub type Result<T> = std::result::Result<T, StreamerError>;
Expand Down Expand Up @@ -242,7 +246,13 @@ fn recv_send(
if let Some(stats) = stats {
packet_batch.packets.iter().for_each(|p| stats.record(p));
}
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::<Vec<_>>())?;
Ok(())
}

Expand Down

0 comments on commit c078ca3

Please sign in to comment.