Не вижу, чтобы это было явно отмечено в
документации, но, скорее всего,
list_socket:receive() нужно вызывать в цикле и складывать возвращаемые значения в таблицу, пока оно не вернёт пустую строку, как это сделано в функции
list в примере выше. Возможно, можно считать размер файла (который передаёт FTP-сервер), а затем при помощи методов
receive_bytes или
receive_buf загрузить его целиком за один вызов, но я не вижу никакой документации, которая описывала бы эти методы.
Это происходит потому, что на низком уровне операционную систему можно попросить
считать байт из соединения в предоставленный приложением буфер заданного размера
, и та имеет право вернуть приложению управление, считав меньше, чем
. (
Функция list_socket:receive() вызывает
nsock_read(), который, судя по
комментарию, возвращает управление после чтения более-менее произвольного количества байт.)