Wenn Daten von einem std::net::UdpSocket
in Rust Lesen verwenden wir einen Puffer:Welche Größe Puffer sollte für das Lesen von einem UDP-Socket verwendet werden?
fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
Wie groß sollte dieser Puffer sein? Ist der Socket ein Stream oder ein Datagramm?
Ja, es ist offensichtlich, dass die Größe des Puffers sollte mit Protokollen Strukturen korrelieren. Allerdings können sich mehrere eingehende Nachrichten im System-UDP-Puffer ansammeln, bevor meine Funktion (die das Leseereignis behandelt) aufgerufen wird. Es ist also unmöglich vorherzusagen, welche Größe ausreicht. –
Wie kann ich SO_SNDBUF und SO_RCVBUF in Rust bekommen? Im Fall der Verwendung von dynamisch zugewiesenen Puffern ist es notwendig, einen Heap zu verwenden, der die Leistung verschlechtert. –
Mit UDP erhalten Sie nur ein Datagramm pro Lesevorgang. Wenn Sie also keine Nachrichten über mehrere Datagramme verteilt haben, sollten Sie in der Lage sein, den Puffer anhand der Nachrichtengröße zu bemessen. –