gpt4 book ai didi

c - 为什么不在 tcp 的情况下重用消息缓冲区

转载 作者:可可西里 更新时间:2023-11-01 02:41:22 24 4
gpt4 key购买 nike

我看到许多开源框架和 tcp/ip 的最佳实践建议永远不要重用您已交给 tcp 层进行传输的缓冲区。其背后的原因是什么?缓冲区只是简单地复制到内核中不是真的吗,那么关于不重用缓冲区的错误是什么?上面的一个典型例子是

char data[1024] = {'1', '2'.................'1024'};
write(socket, data, 1024);
data = {'a', 'b','c'...........}; //reusing the buffer

ZeroMQ 提供了创建缓冲区和删除缓冲区的 API,他们强烈建议不要使用它。 Netperf 创建一个环形缓冲区并确保它永远不会重复使用它当前写入套接字的缓冲区。

最佳答案

write()send() 都会将您的数据复制到 TCP“发送窗口”,因此您不必担心在程序中更改它在那些电话之后。但是请注意,非阻塞套接字可能不会复制所有您的数据,因此您应该检查返回代码以找出实际写入了多少字节。

有可能某些自定义 TCP 堆栈(可能用于非常小的嵌入式系统)需要数据保留,但主流操作系统都不需要这样。

关于c - 为什么不在 tcp 的情况下重用消息缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13476670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com