sockets - servidor - socket udp c++
¿Qué tamaño de buffer se debe usar para leer desde un socket UDP? (2)
Cuando leemos datos de un std::net::UdpSocket
en Rust usamos un buffer:
fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
¿Qué tan grande debe ser este buffer? ¿El socket es una secuencia o un datagrama?
Debe usar un tamaño uno más grande que el datagrama esperado más grande. De esta forma, si recibe uno de ese tamaño, sabe que hubo un error de protocolo y que los datos pueden haberse truncado.
Recibirás un datagrama a la vez. No es un flujo
Puede intentar utilizar los tamaños de búfer de recepción / transmisión que coinciden con las opciones de recepción / transmisión de socket, consulte SO_SNDBUF y SO_RCVBUF en sockets de Linux , getsockopt(3)
, SO_RCVBUF
y SO_SNDBUF
.
Alternativamente, puede usar tamaños de búfer que coincidan y se alineen bien con sus estructuras de protocolo.
Cuanto mayor sea el tamaño del búfer en su programa, menos llamadas IO realizará. En el caso de que ensamble la carga útil desde múltiples ubicaciones de memoria disjuntas, puede usar vectores IO scatter / gather para minimizar las llamadas de IO.