2016-09-28 1 views
0

voranstellen Ich weiß technisch TCP_NOPUSH in FreeBSD und TCP_CORK in Linux angenommen, um ähnlich zu sein.Wie Kopfzeile vor dem Aufruf sendfile mit TCP_NOPUSH in FreeBSD

In Linux kann ich TCP_CORK setzen, einen Header senden, sendfile() und TCP_CORK deaktivieren, um den Header vor der Datei einzufügen. In FreeBSD habe ich versucht, das gleiche mit TCP_NOPUSH zu tun, aber es scheint, als wäre der Header vom Dateiinhalt getrennt. Ich muss zu dumm sein, um etwas falsch zu machen.

Hier ist mein Code (Linux und BSD):

[geteilt]:

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)); 

Ergebnis: Hallo Welt \ n Text .. ..Text .....

Allerdings in 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)); 

Ergebnis: Hallo Welt \ n

Was soll ich tun, um das gleiche Verhalten wie in Linux zu bekommen ???

Antwort

2

Sie müssen das nicht tun; Anders als Linux unterstützt FreeBSD sendfile (2) das Senden von Headern.

+0

Scheint, dass ich das Argument hdtr total ignoriert habe !!! Vielen Dank! – Yuji

Verwandte Themen