当前位置: 技术问答>linux和unix
关于recvfrom函数的一些问题
来源: 互联网 发布时间:2017-03-20
本文导语: 我想问一下recvfrom它接收数据包是从系统中的缓冲区接收数据的么?还有就是在两个数据包发送的间隔非常小的时候会有丢包的现象么,,,,我今天在写一段有关recvfrom的程序时发现用wireshark能够抓到两个间隔时间...
我想问一下recvfrom它接收数据包是从系统中的缓冲区接收数据的么?还有就是在两个数据包发送的间隔非常小的时候会有丢包的现象么,,,,我今天在写一段有关recvfrom的程序时发现用wireshark能够抓到两个间隔时间很小的数据包,但是我的recvfrom函数去只能接收到后面的一个,,不知道这是什么个情况
|
udp接收可以用recvfrom或者recvmsg(一般情况)
recvfrom可用于接收tcp(addr设置为NULL)和udp.
recvfrom只是从系统的socket缓冲中取数据(并没有实际操作网卡接收数据)。recvfrom取数据和“系统实际操作网卡接收数据、数据链路层处理、网络层处理、传输层处理、放到系统缓存中(空间足够否?)”,这两个过程是异步的。
了解每? recvfrom函数和包间隔无关。
你的这个问题,我不清楚具体情况。包间隔短只收到后一个的例子好像不充分,,你看看是否每此包间隔时间段的都只能收到后一个. 我想是不可能的。。 wireshark抓到的包都已经在系统的数据链层处理了,除非接收缓存已经满了,否则是不可能丢失的。被覆盖的说法更不可能。
recvfrom可用于接收tcp(addr设置为NULL)和udp.
recvfrom只是从系统的socket缓冲中取数据(并没有实际操作网卡接收数据)。recvfrom取数据和“系统实际操作网卡接收数据、数据链路层处理、网络层处理、传输层处理、放到系统缓存中(空间足够否?)”,这两个过程是异步的。
了解每? recvfrom函数和包间隔无关。
你的这个问题,我不清楚具体情况。包间隔短只收到后一个的例子好像不充分,,你看看是否每此包间隔时间段的都只能收到后一个. 我想是不可能的。。 wireshark抓到的包都已经在系统的数据链层处理了,除非接收缓存已经满了,否则是不可能丢失的。被覆盖的说法更不可能。
|
不会出现覆盖掉的,,,
只要发送的UDP报文没在网络上丢失,且目标计算机对于此端口的UDP socket缓冲空间足够。则此UDP报文就安全到达了;否则,报文丢失。安全到达了的报文,就可以用recvfrom随时的从系统缓冲中一个个取出来了。
只要发送的UDP报文没在网络上丢失,且目标计算机对于此端口的UDP socket缓冲空间足够。则此UDP报文就安全到达了;否则,报文丢失。安全到达了的报文,就可以用recvfrom随时的从系统缓冲中一个个取出来了。