数据接收回来后,本来就应立即处理掉,这样是比较简单的想法。但由于网络带宽有限,这时就需要限制UDP接收数据的速度。下面就来分析这种需求的实现,它的代码如下:
#001 S32 LLPacketRing::receivePacket (S32 socket, char *datap)
#002 {
#003 S32 packet_size = 0;
#004
下面判断是否使用接收的流量限制。
#005 // If using the throttle, simulate a limited size input buffer.
#006 if (mUseInThrottle)
#007 {
#008 BOOL done = FALSE;
#009
#010 // push any current net packet (if any) onto delay ring
下面开始循环地接收数据,并且判断是否到达流量的最大值。
#011 while (!done)
#012 {
#013 LLPacketBuffer *packetp;
#014 packetp = new LLPacketBuffer(socket);
#015
上面创建LLPacketBuffer对象来接收数据。
#016 if (packetp->getSize())
#017 {
#018 mActualBitsIn += packetp->getSize() * 8;
#019
#020 // Fake packet loss
#021 &n