应该使用什么大小的缓冲区从UDP套接字读取?

时间:2016-03-31 12:48:20

标签: sockets udp size rust buffer

从Rust中的std::net::UdpSocket读取数据时,我们使用缓冲区:

fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>

这个缓冲区应该有多大?套接字是流还是数据报?

2 个答案:

答案 0 :(得分:1)

您应使用大于最大预期数据报的大小。这样,如果你收到一个这么大的,你知道有一个协议错误,并且数据可能已被截断。

您将一次收到一个数据报。这不是一个流。

答案 1 :(得分:0)

您可以尝试使用与套接字接收/发送选项匹配的接收/发送缓冲区大小,请参阅SO_SNDBUF and SO_RCVBUF on Linux socketsgetsockopt(3)SO_RCVBUFSO_SNDBUF。< / p>

或者,您可以使用与协议结构匹配且匹配良好的缓冲区大小。

程序中的缓冲区大小越大,执行的IO调用越少。在从多个不相交的内存位置组装有效负载的情况下,您可以使用分散/收集IO向量来最小化IO系统调用。