//------------------------------------------------------------------------------------- int UDPPacket::recvFromEndPoint(EndPoint & ep, Address* pAddr) { KBE_ASSERT(maxBufferSize() > wpos()); // 当接收来的大小大于接收缓冲区的时候,recvfrom返回-1 int len = ep.recvfrom(data() + wpos(), size() - wpos(), (u_int16_t*)&pAddr->port, (u_int32_t*)&pAddr->ip); if(len > 0) wpos(wpos() + len); return len; }
//------------------------------------------------------------------------------------- int TCPPacket::recvFromEndPoint(EndPoint & ep, Address* pAddr) { //KBE_ASSERT(MessageHandlers::pMainMessageHandlers != NULL && "Must set up a MainMessageHandlers!\n"); KBE_ASSERT(maxBufferSize() > wpos()); int len = ep.recv(data() + wpos(), (int)(size() - wpos())); if(len > 0) { wpos((int)(wpos() + len)); // 注意:必须在大于0的时候否则DEBUG_MSG将会导致WSAGetLastError返回0从而陷入死循环 // DEBUG_MSG(fmt::format("TCPPacket::recvFromEndPoint: datasize={}, wpos={}.\n", len, wpos())); } return len; }
//------------------------------------------------------------------------------------- int TCPPacket::recvFromEndPoint(EndPoint & ep, Address* pAddr) { //KBE_ASSERT(MessageHandlers::pMainMessageHandlers != NULL && "Must set up a MainMessageHandlers!\n"); KBE_ASSERT(maxBufferSize() > wpos()); int len = ep.recv(data() + wpos(), size() - wpos()); wpos(wpos() + len); /* // 注意:必须在大于0的时候否则DEBUG_MSG将会导致WSAGetLastError返回0从而陷入死循环 if(len > 0) { DEBUG_MSG(boost::format("TCPPacket::recvFromEndPoint: datasize=%1%, wpos=%2%.\n") % len % wpos()); } */ return len; }
//------------------------------------------------------------------------------------- void TCPPacket::onReclaimObject() { Packet::onReclaimObject(); data_resize(maxBufferSize()); }
//------------------------------------------------------------------------------------- TCPPacket::TCPPacket(MessageID msgID, size_t res): Packet(msgID, true, res) { data_resize(maxBufferSize()); wpos(0); }
//------------------------------------------------------------------------------------- UDPPacket::UDPPacket(MessageID msgID, size_t res): Packet(msgID, false, res) { data_resize(maxBufferSize()); wpos(0); }