/* ================== idPort::GetPacket ================== */ bool idPort::GetPacket( netadr_t &from, void *data, int &size, int maxSize ) { udpMsg_t *msg; bool ret; while( 1 ) { ret = Net_GetUDPPacket( netSocket, from, (char *)data, size, maxSize ); if ( !ret ) { break; } if ( net_forceDrop.GetInteger() > 0 ) { if ( rand() < net_forceDrop.GetInteger() * RAND_MAX / 100 ) { continue; } } packetsRead++; bytesRead += size; if ( net_forceLatency.GetInteger() > 0 ) { assert( size <= MAX_UDP_MSG_SIZE ); msg = udpPorts[ bound_to.port ]->udpMsgAllocator.Alloc(); memcpy( msg->data, data, size ); msg->size = size; msg->address = from; msg->time = Sys_Milliseconds(); msg->next = NULL; if ( udpPorts[ bound_to.port ]->recieveLast ) { udpPorts[ bound_to.port ]->recieveLast->next = msg; } else { udpPorts[ bound_to.port ]->recieveFirst = msg; } udpPorts[ bound_to.port ]->recieveLast = msg; } else { break; } } if ( net_forceLatency.GetInteger() > 0 || ( udpPorts[ bound_to.port] && udpPorts[ bound_to.port ]->recieveFirst ) ) { msg = udpPorts[ bound_to.port ]->recieveFirst; if ( msg && msg->time <= Sys_Milliseconds() - net_forceLatency.GetInteger() ) { memcpy( data, msg->data, msg->size ); size = msg->size; from = msg->address; udpPorts[ bound_to.port ]->recieveFirst = udpPorts[ bound_to.port ]->recieveFirst->next; if ( !udpPorts[ bound_to.port ]->recieveFirst ) { udpPorts[ bound_to.port ]->recieveLast = NULL; } udpPorts[ bound_to.port ]->udpMsgAllocator.Free( msg ); return true; } return false; } else { return ret; } }
/* ======================== idUDP::GetPacket ======================== */ bool idUDP::GetPacket( netadr_t& from, void* data, int& size, int maxSize ) { // DG: this fake while(1) loop pissed me off so I replaced it.. no functional change. if( ! Net_GetUDPPacket( netSocket, from, ( char* )data, size, maxSize ) ) { return false; } packetsRead++; bytesRead += size; return true; // DG end }
/* ======================== idUDP::GetPacket ======================== */ bool idUDP::GetPacket( netadr_t& from, void* data, int& size, int maxSize ) { bool ret; while( 1 ) { ret = Net_GetUDPPacket( netSocket, from, ( char* )data, size, maxSize ); if( !ret ) { break; } packetsRead++; bytesRead += size; break; } return ret; }