从Rust中的std::net::UdpSocket
读取数据时,我们使用缓冲区:
fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
这个缓冲区应该有多大?套接字是流还是数据报?
答案 0 :(得分:1)
您应使用大于最大预期数据报的大小。这样,如果你收到一个这么大的,你知道有一个协议错误,并且数据可能已被截断。
您将一次收到一个数据报。这不是一个流。
答案 1 :(得分:0)
您可以尝试使用与套接字接收/发送选项匹配的接收/发送缓冲区大小,请参阅SO_SNDBUF and SO_RCVBUF on Linux sockets,getsockopt(3)
,SO_RCVBUF
和SO_SNDBUF
。< / p>
或者,您可以使用与协议结构匹配且匹配良好的缓冲区大小。
程序中的缓冲区大小越大,执行的IO调用越少。在从多个不相交的内存位置组装有效负载的情况下,您可以使用分散/收集IO向量来最小化IO系统调用。