На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Indy 10 и Socket Error #10054 , Как не допустить закрытие сокета?
    Притащил проект домой, думал на выходных пару часов поковырять но появилась странная ошибка Socket Error #10054 при попытке принять (скачать) файл с FTP ресурса.

    По ошибке 10054 вот что нашел:

    WSAECONNRESET (10054)
    Connection reset by peer.
    An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket.) This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.


    Проще говоря сокет закрывается по непонятным мне причинам со стороны сервера.
    Причём к моменту окончания описания этой проблемы я проверил еще раз получение файла разных размеров и все прошло без ошибок...

    Вобщем я вообще не понял почему такое случилось... И как можно этого избежать в дальнейшем?
      Для себя придумал два способа:

      1) это принудительно удерживать соединения по таймеру отправляя пустую команду NOOP
      Также работают подавляющее большинство ФТП клиентов с функцией KEEPALIVE.

      2) это собственно проверка а не закрыл ли сервер сокет без уведомления нас.

      ExpandedWrap disabled
        function IfDisconnect: Boolean;
        begin
          try
            IdFTP1.SendCmd('NOOP');
            Result := True; //Есть соединение
          except
            Result := False; //Нет соединения
          end;
        end;


      Как видно все банально просто, но если кто знает другое решение то поделитесь.
        Хм... А если попробовать что-то вроде IdFTP1.Socket.Close; ?))
          M
          AutoBOT, убедительная просьба впредь не поднимать старых тем, особенно тех, что помечены "Вопрос решен".
          Внимательно смотрите на дату последнего сообщения.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0439 ]   [ 16 queries used ]   [ Generated: 22.11.25, 11:59 GMT ]