Эликсир эрланг: ftp.send застрял - PullRequest
1 голос
/ 27 марта 2020

Я использую Erlang ftp lib в моем проекте elixir для отправки файла на ftp-сервер.

Я вызываю функцию send :ftp.send(pid, '#{local_path}', '#{remote_path}') для загрузки файла на FTP-сервер. Большую часть времени он успешно загружает файлы, но иногда застревает здесь, не переходя на следующую строку.

Согласно документам он должен возвращать :ok или {:error, reason}, но просто застрял на :ftp.send ,

Может кто-нибудь дать мне предложение? Я не знаком с Erlang.

Версия: Elixir 1.7.3 (compiled with Erlang/OTP 21)

1 Ответ

1 голос
/ 27 марта 2020
Модуль

ftp имеет два типа timeout, оба установлены во время инициализации услуги ftp.

Вот выдержка из документации:

{timeout, Timeout}
Тайм-аут соединения. По умолчанию 60000 (миллисекунды).

{dtimeout, DTimeout}
Тайм-аут подключения к данным. Время ожидания клиентом подключения сервера к сокету данных. По умолчанию infinity.

Время ожидания подключения к данным имеет значение по умолчанию infinity, что означает, что он будет зависать, если возникнут какие-либо проблемы с сетью. Чтобы преодолеть эту проблему, я бы посоветовал вам установить это значение несколько значимым и соответствующим образом обработать время ожидания в вашем приложении.

{:ok, pid} = :ftp.start_service(
  host: '...', timeout: 30_000, dtimeout: 10_000
)
:ftp.send(pid, '#{local_path}', '#{remote_path}')
...