Почему у меня возникает исключение для ServeFile в idHTTPServer? - PullRequest
0 голосов
/ 13 января 2019

Попытка загрузки файла с idHTTPServer. Из браузера я делаю что-то вроде localhost: 7777 / files / 2019/1/7 / 1.php и, наконец, скачиваю файл.

Но когда я закрываю сервер в режиме отладки, у меня появляется следующая ошибка

EidClosedSocket с сообщением «Отключено»

Как я могу это исправить?

procedure TRPFiles.Download;
var
  filepath: string;
begin
  filepath := ExtractFileDir(Application.ExeName) + StringReplace(RequestInfo.URI, '/', '\', [rfReplaceAll]);
  if TFile.Exists(filepath) then
  begin
    ResponseInfo.SmartServeFile(Context, RequestInfo, filepath);
    FResponses.OK();
  end;
end;

1 Ответ

0 голосов
/ 13 января 2019

Исправлять нечего. Это совершенно нормальное поведение. Когда вы выключаете сервер, он закрывает все клиентские сокеты, которые все еще открыты, что, в свою очередь, приводит к сбою любых последующих операций ввода-вывода на этих сокетах. Вы видите исключение только потому, что работаете внутри отладчика. Просто проигнорируйте это и позвольте приложению обработать это как обычно. Сервер будет обрабатывать исключение внутри, поэтому он может закрыть потоки, которые управляют закрытыми сокетами клиента. Вы не увидите исключение при запуске приложения вне отладчика.

...