diff --git a/Source/dvlnet/tcp_server.cpp b/Source/dvlnet/tcp_server.cpp index b520d85e8..c44eef4c4 100644 --- a/Source/dvlnet/tcp_server.cpp +++ b/Source/dvlnet/tcp_server.cpp @@ -75,20 +75,26 @@ void tcp_server::HandleReceive(const scc &con, const asio::error_code &ec, con->recv_buffer.resize(bytesRead); con->recv_queue.Write(std::move(con->recv_buffer)); con->recv_buffer.resize(frame_queue::max_frame_size); - while (con->recv_queue.PacketReady()) { - try { - auto pkt = pktfty.make_packet(con->recv_queue.ReadPacket()); - if (con->plr == PLR_BROADCAST) { - HandleReceiveNewPlayer(con, *pkt); - } else { - con->timeout = timeout_active; - HandleReceivePacket(*pkt); + try { + while (con->recv_queue.PacketReady()) { + try { + auto pkt = pktfty.make_packet(con->recv_queue.ReadPacket()); + if (con->plr == PLR_BROADCAST) { + HandleReceiveNewPlayer(con, *pkt); + } else { + con->timeout = timeout_active; + HandleReceivePacket(*pkt); + } + } catch (dvlnet_exception &e) { + Log("Network error: {}", e.what()); + DropConnection(con); + return; } - } catch (dvlnet_exception &e) { - Log("Network error: {}", e.what()); - DropConnection(con); - return; } + } catch (frame_queue_exception &e) { + Log("Invalid packet: {}", e.what()); + DropConnection(con); + return; } StartReceive(con); }