gpt4 book ai didi

linux - 如何在 FreeBSD 中使用 TCP_NOPUSH 调用 sendfile 之前添加 header

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:05 27 4
gpt4 key购买 nike

我从技术上知道 FreeBSD 中的 TCP_NOPUSH 和 Linux 中的 TCP_CORK 应该是相似的。

在 Linux 中,我可以设置 TCP_CORK,发送 header ,sendfile() 和取消设置 TCP_CORK 以在文件前面插入 header 。在 FreeBSD 中,我尝试对 TCP_NOPUSH 做同样的事情,但似乎 header 与文件内容分开了。我一定是太笨了,没弄错。

这是我的代码(Linux 和 BSD):

[分享]:

int yes = 1;
int no = 0;
char buf[30] = "Hello World!\n";

[Linux]

setsockopt(sockfd, IPPROTO_TCP, TCP_CORK, &yes, sizeof(int)); 
write(sockfd, buf, 30);
sendfile(sockfd, filefd, NULL, SIZE_OF_FILE);
setsockopt(sockfd, IPPROTO_TCP, TCP_CORK, &no, sizeof(int));

结果:世界您好!\n文字....文字.....

但是在 FreeBSD 中:

setsockopt(sockfd, IPPROTO_TCP, TCP_NOPUSH, &yes, sizeof(int));
write(sockfd, buf, 30);
sendfile(filefd, sockfd, 0, SIZE_OF_FILE, NULL, NULL, 0);
setsockopt(sockfd, IPPROTO_TCP, TCP_NOPUSH, &new, sizeof(int));

结果:世界您好!\n

我应该怎么做才能获得与 Linux 中相同的行为???

最佳答案

您不需要这样做;与 Linux 不同,FreeBSD sendfile(2) 支持发送 header 。

关于linux - 如何在 FreeBSD 中使用 TCP_NOPUSH 调用 sendfile 之前添加 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39755899/

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