diff --git a/src/ftp_server.cpp b/src/ftp_server.cpp
index 29eb628888bbbaf5c47c324afa0a12893d8877eb..b1db52289437245d660ea5b5871c42b882ff4f6a 100644
--- a/src/ftp_server.cpp
+++ b/src/ftp_server.cpp
@@ -92,12 +92,14 @@ FtpServer::read(std::vector<uint8_t>& buffer) const
     if (!out_) {
         if (closed_) {
             closed_ = false;
-            buffer.resize(4);
-            buffer[0] = 'N'; buffer[1] = 'G'; buffer[2] = 'O'; buffer[3] = '\n';
-            RING_DBG() << "[FTP] sending NGO (cancel) order";
-        } else {
-            buffer.resize(0);
+            if (rx_ < fileSize_) {
+                buffer.resize(4);
+                buffer[0] = 'N'; buffer[1] = 'G'; buffer[2] = 'O'; buffer[3] = '\n';
+                RING_DBG() << "[FTP] sending NGO (cancel) order";
+                return true;
+            }
         }
+        buffer.resize(0);
     } else if (go_) {
         go_ = false;
         buffer.resize(3);