bool TcpSession::recvPacket() { if (listener && listener->onReceive()) return true; int n; while ((n = recv(sock, buf + bufSize, TCP_PACKET_SIZE - bufSize, 0)) > 0) { bufSize += n; char *start = buf; char *end = start + bufSize; uint16 len; while (start + sizeof(len) < end) { len = ntohs(*(uint16 *) start); if (end - start - sizeof(len) < len) break; start += sizeof(len); if (len >= sizeof(TCP_HEADER)) { TcpInPacket in(start, len); onPacketReceived(in); } start += len; } bufSize = end - start; if (bufSize > 0) memcpy(buf, start, bufSize); } if (n == 0) onClose(); return (n >= 0); }
void update() { if(!busy) { ssvu::lo("ManagedSocket") << "Update failed - not busy" << std::endl; return; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); sf::Packet packet; for(int i{0}; i < 5; ++i) { if(busy && socket.receive(packet) == sf::Socket::Done) onPacketReceived(packet); std::this_thread::sleep_for(std::chrono::milliseconds(50)); } }