diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua
index ccb579ba5de8d8e9d0045f604c1aec9b51ff1a1a..1eb2dea73a3d147a4413f62e3c54277d90a71a22 100644
--- a/src/lua/bsdsocket.lua
+++ b/src/lua/bsdsocket.lua
@@ -556,18 +556,24 @@ local function readline_check(self, eols, limit)
     if string.len(rbuf) == 0 then
         return nil
     end
+
+    local shortest
     for i, eol in pairs(eols) do
         if string.len(rbuf) >= string.len(eol) then
             local data = string.match(rbuf, "^(.-" .. eol .. ")")
             if data ~= nil then
                 if string.len(data) > limit then
-                    return string.sub(data, 1, limit)
+                    data = string.sub(data, 1, limit)
+                end
+                if shortest == nil then
+                    shortest = data
+                elseif #shortest > #data then
+                    shortest = data
                 end
-                return data
             end
         end
     end
-    return nil
+    return shortest
 end
 
 local function readline(self, limit, eol, timeout)