本文主要是介绍使用recvfrom()接收UDP包在Windows和Linux平台的不同表现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 UDP接收原理
操作系统的UDP接收流程如下:收到一个UDP包后,验证没有错误后,放入一个包队列中,队列中的每一个元素就是一个完整的UDP包。当应用程序通过recvfrom()读取时,OS把相应的一个完整UDP包取出,然后拷贝到用户提供的内存中,物理用户提供的内存大小是多少,OS都会完整取出一个UDP包。如果用户提供的内存小于这个UDP包的大小,那么在填充慢内存后,UDP包剩余的部分就会被丢弃,以后再也无法取回。
这与TCP接收完全不同,TCP没有完整包的概念,也没有边界,OS只会取出用户要求的大小,剩余的仍然保留在OS中,下次还可以继续取出。
socket编程虽然是事实上的标准,而且不同平台提供的接口函数也非常类似,但毕竟它不存在严格的标准。所以各个平台的实现也不完全兼容。下面就从recvfrom()这个函数看看Window平台和Linux平台的不同。
2 Windows平台的表现
先看头文件中的声明:
这篇关于使用recvfrom()接收UDP包在Windows和Linux平台的不同表现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!