diff --git a/src/core/gdb_server.cpp b/src/core/gdb_server.cpp index 5e9c21027..ec1efcf73 100644 --- a/src/core/gdb_server.cpp +++ b/src/core/gdb_server.cpp @@ -672,8 +672,11 @@ void GDBServer::ClientSocket::SendPacket(std::string_view sv) return; DEBUG_LOG("Send reply: {}", sv); - if (size_t written = Write(sv.data(), sv.length()); written != sv.length()) + if (size_t written = Write(sv.data(), sv.length(), false); written != sv.length()) + { ERROR_LOG("Only wrote {} of {} bytes.", written, sv.length()); + Close(); + } } void GDBServer::ClientSocket::OnSystemPaused(u8 signal) diff --git a/src/util/sockets.cpp b/src/util/sockets.cpp index 6c63d0e28..f67198b60 100644 --- a/src/util/sockets.cpp +++ b/src/util/sockets.cpp @@ -1072,13 +1072,13 @@ size_t BufferedStreamSocket::Read(void* buffer, size_t buffer_size) return bytes_to_read; } -size_t BufferedStreamSocket::Write(const void* buffer, size_t buffer_size) +size_t BufferedStreamSocket::Write(const void* buffer, size_t buffer_size, bool allow_smaller /* = true */) { if (!m_connected) return 0; // Read from receive buffer. - const std::span wrbuf = AcquireWriteBuffer(buffer_size, true); + const std::span wrbuf = AcquireWriteBuffer(buffer_size, allow_smaller); if (wrbuf.empty()) return 0; diff --git a/src/util/sockets.h b/src/util/sockets.h index 0ce6330a4..0150122d5 100644 --- a/src/util/sockets.h +++ b/src/util/sockets.h @@ -277,7 +277,7 @@ public: // Hide StreamSocket read/write methods. size_t Read(void* buffer, size_t buffer_size); - size_t Write(const void* buffer, size_t buffer_size); + size_t Write(const void* buffer, size_t buffer_size, bool allow_smaller = true); size_t WriteVector(const void** buffers, const size_t* buffer_lengths, size_t num_buffers); virtual void Close() override;