一句話總結:
tcp_nodelay:禁止nagle算法,有需要發送的就立即發送,比較常見
tcp_cork:它是一種加強的nagle算法,過程和nagle算法類似,都是累計數據然后發送。但它沒有 nagle中1的限制,所以,在設置cork后,即使所有ack都已經收到,但我還是不想發送數據,我還想繼續等待應用層更多的數據,所以它的效果比nagle更好。效率上與Nagle算法相比,Nagle算法主要避免網絡因為太多的小包(協議頭的比例非常之大)而擁塞,而CORK算法則是為了提高網絡的利用率,使得總體上協議頭占用的比例盡可能的小
tcp_cork使用方法
int on = 1;
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* 設置cork */
write (fd, …);
...
sendfile (fd, …);
…
on = 0;
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* 拔去塞子 ,發送數據*/