2016-06-27 31 views
2

如何在寫函數中啓用TCP PSH標誌來發送消息而不填充緩衝區?如何在TCP/IP堆棧中啓用tcp psh標誌?

+0

你在用什麼語言進行編程?你可以添加一個帶有所述語言的標籤到你的問題中,這樣人們可以更容易地找到你的問題。 –

+0

謝謝。我正在研究C語言 –

+0

檢查這個線程:http://stackoverflow.com/questions/855544/is-there-a-way-to-flush-a-posix-socket –

回答

0

如果沒有設置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 
[email protected]@...Z."..:.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,表明現在會有更多的數據出現。