gpt4 book ai didi

c - sendto 需要很多时间

转载 作者:行者123 更新时间:2023-11-30 16:17:11 26 4
gpt4 key购买 nike

我正在尝试在没有 tcp 有效负载的情况下进行客户端-服务器通信。我只是使用 tcp 的 header 作为有效负载字段,默认情况下为 20 字节。我刚刚意识到传输大文件时 CPU 使用率非常高,我尝试在代码的每个部分放置一些计时器。 (我使用了 rdtsc。)结果是我在 1000~ 滴答内构建了数据包的所有内容(我不触及 ipv4 校验和,因为内核会自动计算它);然后我查看了发送时间,需要100000~tick(比构建数据包多100倍)。有没有更快的方法来发送原始 tcp 数据包而不使用 sendto 或者使 sendto 更快?

我这样测量发送时间:

timefirst = rdtsc()
sendto()
timesecond = rdtsc()
print timesecond - timefirst

我使用以下命令创建发送套接字:

int mysocket = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);
int one = 1;
const int *val = &one;
setsockopt(mysocket, IPPROTO_IP, IP_HDRINCL, val, sizeof(one));

注意:我只谈论我这边的数据包时间(发送程序和内核)。这与它通过线路、ISP 和路由器的速度有多慢无关。

最佳答案

您是否遇到过 Nagle 算法:https://en.wikipedia.org/wiki/Nagle%27s_algorithm

如果是这样,您可以尝试设置 TCP_NODELAY 套接字选项,这可能会解决数据发送速度比您预期慢的问题。

关于c - sendto 需要很多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56319071/

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