如何启用写入函数中的TCP PSH
标志在不填充缓冲区的情况下发送消息?
最佳答案
如果现在没有设置PSH标志,您是否看不到您的数据包将要退出?这里的一些实验表明,tcpdump中的以下数据包:
00:00:47.633884 IP 90.155.34.205.52092 > 216.58.222.100.80: Flags [P.], seq 1:16, ack 1, win 29, options [nop,nop,TS val 35956508 ecr 2650150746], length 15: HTTP: GET / HTTP/1.0
E..CD.@[email protected]."..:.d.|.P......QM...........
.$.....ZGET / HTTP/1.0
用一个非常简单的无聊的write()-从strace'ing netcat:
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("216.58.222.100")}, 16) = 0
write(3, "GET / HTTP/1.0\n", 15) = 15
在我看来,psh标志只有在以下情况下才是未设置的:例如,如果我传输的数据多于一个段中的数据,则只有最后一个段会有psh,这表示现在会有更多的数据。
关于c - 如何在TCP/IP堆栈中启用tcp psh标志?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38052373/