2016-03-31 50 views

回答

0

您可以尝试使用接收/发送匹配的插座接收/发送选项缓冲区大小,见SO_SNDBUF and SO_RCVBUF on Linux socketsgetsockopt(3)SO_RCVBUFSO_SNDBUF

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

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

+0

是的,很明显缓冲区的大小应该与协议结构相关联。但是,在我的函数(处理读事件)被调用之前,多个传入的消息可能会累积在系统UDP缓冲区中。所以不可能预测什么尺寸足够了。 –

+0

如何在Rust中获取SO_SNDBUF和SO_RCVBUF?在使用动态分配的缓冲区的情况下,有必要使用使性能变差的堆。 –

+1

使用UDP,每个读取操作只能接收一个数据报,因此除非您将消息拆分为多个数据报,否则您应该能够根据消息大小调整缓冲区大小。 –

1

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

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

相关问题