我知道技术上FreeBSD中的TCP_NOPUSH和Linux中的TCP_CORK假设是类似的。如何在FreeBSD中使用TCP_NOPUSH调用sendfile之前添加头文件
在Linux中,我可以设置TCP_CORK,发送头文件sendfile(),并且取消设置TCP_CORK以在文件前面插入头文件。在FreeBSD中,我试图用TCP_NOPUSH做同样的事情,但似乎头文件与文件内容是分开的。我一定愚蠢到错误的地方。
这里是我的代码(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));
结果: 的Hello World \ n 文本.. ..text .....
但是在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));
结果: 的Hello World \ n
我应该为了得到相同的行为在Linux中做???
2016-09-28
Yuji