假設在UDP中,我知道我接收的數據包每個都是200字節。關於接收數據包時的UDP buffersize的問題
在C socket編程:
n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);
如果我定義爲緩衝區大小1000這是否意味着我可以每次接收到5個數據包? 或者我仍然只能得到1個數據包,剩餘的800個字節在我的緩衝區中未被使用?
tks!
假設在UDP中,我知道我接收的數據包每個都是200字節。關於接收數據包時的UDP buffersize的問題
在C socket編程:
n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);
如果我定義爲緩衝區大小1000這是否意味着我可以每次接收到5個數據包? 或者我仍然只能得到1個數據包,剩餘的800個字節在我的緩衝區中未被使用?
tks!
如果你知道你的數據包永遠不會超過200字節,那麼就不需要聲明你的緩衝區大於200字節。
每個recvfrom()都會收到AT MOST的一個數據包。剩餘數據包由堆棧緩衝。在「while()」循環中讀取多個數據包確實沒有「性能損失」。
在UDP套接字上,recvfrom()
將一次只返回一個數據包中的數據。
這是正確的,但它可能是很好的添加引用... –
謝謝你完全回答我的問題。關於堆棧,是在內核級還是網卡處理? – Wrythe
「網絡堆棧」是OS的權限。 – paulsm4