2011-09-06 76 views
1

假设在UDP中,我知道我接收的数据包每个都是200字节。关于接收数据包时的UDP buffersize的问题

在C socket编程:

n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len); 

如果我定义为缓冲区大小1000这是否意味着我可以每次接收到5个数据包? 或者我仍然只能得到1个数据包,剩余的800个字节在我的缓冲区中未被使用?

tks!

回答

2

如果你知道你的数据包永远不会超过200字节,那么就不需要声明你的缓冲区大于200字节。

每个recvfrom()都会收到AT MOST的一个数据包。剩余数据包由堆栈缓冲。在“while()”循环中读取多个数据包确实没有“性能损失”。

+0

这是正确的,但它可能是很好的添加引用... –

+0

谢谢你完全回答我的问题。关于堆栈,是在内核级还是网卡处理? – Wrythe

+0

“网络堆栈”是OS的权限。 – paulsm4

1

在UDP套接字上,recvfrom()将一次只返回一个数据包中的数据。