When I call the function

IdFtp.List(myList, '', false);

afterwards I have logged in and changed the ftp directory, I get a socket-error #10054 exception (“Connection reset by peer.”) occesionally.

When I call that function e.g. 20 times consecutively I get that exception 1 time.

That problem I have only encountered on Vista OS.

Does anybody know what the problem is or how I can avoid it?

asked Mar 28, 2012 at 13:12

markus_ja's user avatar

1

Not much you can do about this, because the disconnection is done by the FTP server.
You have a few choices:

  • Increase (or disable) the timeout settings (every FTP server has a different name for it) on your FTP Server connection settings.
  • Tell server that you are alive by sending NOOP command periodically (switching to Passive mode can also help).
  • Catch that exception and reconnect silently (This is my preferred solution because we have many FTP servers and I don’t trust the sys-admins to change the FTP server time-out settings).

Here is a screen-shot from FileZilla FTP server time-out settings:

enter image description here

Note that with the above settings, the FTP client will be disconnected after 2 min of non-activity.
setting that value to 0, will disable the time-out.

answered Mar 28, 2012 at 23:27

kobik's user avatar

kobikkobik

21k4 gold badges62 silver badges121 bronze badges

1

The FTP protocol uses multiple socket connections. Every time you call List(), a new socket connection is established to transfer the requested listing data. It sounds like the FTP server is not always closing the socket correctly at the end of a transfer.

answered Mar 28, 2012 at 20:24

Remy Lebeau's user avatar

Remy LebeauRemy Lebeau

558k31 gold badges460 silver badges777 bronze badges

2

In the component “IdFTP”, change the following properties:

  • “Passive” = “False”
  • “TransferType” = “ftASCII”

Litty's user avatar

Litty

1,8561 gold badge16 silver badges35 bronze badges

answered Feb 17, 2016 at 19:22

Luciano Trevisan Alberti's user avatar

When I call the function

IdFtp.List(myList, '', false);

afterwards I have logged in and changed the ftp directory, I get a socket-error #10054 exception (“Connection reset by peer.”) occesionally.

When I call that function e.g. 20 times consecutively I get that exception 1 time.

That problem I have only encountered on Vista OS.

Does anybody know what the problem is or how I can avoid it?

asked Mar 28, 2012 at 13:12

markus_ja's user avatar

1

Not much you can do about this, because the disconnection is done by the FTP server.
You have a few choices:

  • Increase (or disable) the timeout settings (every FTP server has a different name for it) on your FTP Server connection settings.
  • Tell server that you are alive by sending NOOP command periodically (switching to Passive mode can also help).
  • Catch that exception and reconnect silently (This is my preferred solution because we have many FTP servers and I don’t trust the sys-admins to change the FTP server time-out settings).

Here is a screen-shot from FileZilla FTP server time-out settings:

enter image description here

Note that with the above settings, the FTP client will be disconnected after 2 min of non-activity.
setting that value to 0, will disable the time-out.

answered Mar 28, 2012 at 23:27

kobik's user avatar

kobikkobik

21k4 gold badges62 silver badges121 bronze badges

1

The FTP protocol uses multiple socket connections. Every time you call List(), a new socket connection is established to transfer the requested listing data. It sounds like the FTP server is not always closing the socket correctly at the end of a transfer.

answered Mar 28, 2012 at 20:24

Remy Lebeau's user avatar

Remy LebeauRemy Lebeau

558k31 gold badges460 silver badges777 bronze badges

2

In the component “IdFTP”, change the following properties:

  • “Passive” = “False”
  • “TransferType” = “ftASCII”

Litty's user avatar

Litty

1,8561 gold badge16 silver badges35 bronze badges

answered Feb 17, 2016 at 19:22

Luciano Trevisan Alberti's user avatar

    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_

    >
    Indy 10 и Socket Error #10054
    , Как не допустить закрытие сокета?

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,

      Притащил проект домой, думал на выходных пару часов поковырять но появилась странная ошибка 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.

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

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


      User32



      Сообщ.
      #2

      ,

        Для себя придумал два способа:

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

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

        ExpandedWrap disabled

          function IfDisconnect: Boolean;

          begin

            try

              IdFTP1.SendCmd(‘NOOP’);

              Result := True; //Есть соединение

            except

              Result := False; //Нет соединения

            end;

          end;

        Как видно все банально просто, но если кто знает другое решение то поделитесь.


        AutoBOT



        Сообщ.
        #3

        ,

          Хм… А если попробовать что-то вроде IdFTP1.Socket.Close; ?))


          arj99



          Сообщ.
          #4

          ,

            M

            AutoBOT, убедительная просьба впредь не поднимать старых тем, особенно тех, что помечены “Вопрос решен”.
            Внимательно смотрите на дату последнего сообщения.

            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

            0 пользователей:

            • Предыдущая тема
            • Delphi: Сетевое программирование
            • Следующая тема

            Рейтинг@Mail.ru

            [ Script execution time: 0,0442 ]   [ 16 queries used ]   [ Generated: 7.10.23, 04:29 GMT ]  

            tags: Delphi control N-IDFTP  Delphi B Common Error / Question  Delphi 7

            Delphi IDFTP error: Socket Error 10054 – Connection Reset by peer – connection is reset

            Problem scenario: The connection is normal, the connection remote server has an abnormal

            Cause Analysis:

            • 2 modes of IDFTP connections: proactive and passive.
            • Active mode by default

            Solution:

            Connect the remote server. Set IDFTP to passive mode

            IDftp1.passive: = true; // passive mode
            

            Create time: 2020.10.28 Updated:


            Intelligent Recommendation

            Read from socket failed: Connection reset by peer.

            When the key is copied to another host, an error occurred: View the log in /var/log/auth.log to the host: Should be the permissions of the / etc / ssh folder, perform the following operation change pe…

            Connection reset by peer

            Question:   solution: which is: Appendix (only for the usage of SSH in Linux Shell) 1. What is SSH? Secure Shell (SSH) is an encrypted network transmission protocol that can provide a secure transmiss…

            Remember the Connection Reset by Peer

            Recent work needs, I wrote a simple web program, program subject Main.go: Phenomenon: run normally and return the result under Windows, but after linux normal monitoring port, CURL access prompt: Use …

            More Recommendation

            Elasticsearch Connection Reset by Peer

            background The previous application and ES are in Alibaba Cloud, there is no problem with ES Recently, because the application needs to move from Alibaba Cloud to other clouds, ES temporarily retains …

            git-Connection was reset, errno 10054

            git-Connection was reset, errno 10054 First, this error is likely that the network is unstable, and the connection timeout is caused. If you still have an error after you try again, you can perform th…

            Related Posts

            • UDP connection is reset error 10054 under Windows
            • Git Clone error “Connection WAS Reset, ERRNO 10054”
            • [SSH error] ssh_exchange_identification: read: Connection reset by peer
            • The ab test error: connection reset by peer solution
            • Nginx Error Analysis `104: Connection Reset by Peer`
            • Remember the Connection Reset by Peer to report an error repair
            • Git submission code error (OpenSSL SSL_READ: Connection Was Reset, Errno 10054)
            • The old project using tomcat has an exception: Connection reset by peer: socket write error exception solution
            • IO Error: Connection reset by peer, Authentication lapse 137099 ms.
            • Ab stress test error: apr_socket_recv: Connection reset by peer (104)

            Popular Posts

            • Python- Heap-HEAPD
            • DAY12 Closure function, closing features, anonymous functions (using a sentence to express only a function of return value)
            • LookupError: “gw_lt” is not among the defined enum values
            • Java Logger Summary
            • Django implements paging function
            • Quartz
            • [Code as you want to record] Day12-binary tree part01
            • Getting started with simple Bayesian method
            • Use VisualStudio 2010 from the analysis to implementation (5) – Using Component Diagram Design System Structure
            • Data Warehouse 1.4 | Business Data Warehouse Construction | Zipper Table | Presto

            Recommended Posts

            • [Turn] Get the namespace, class name, method name
            • [ ] – Update NPM and Node under Windows
            • Chapter 17 Special members
            • Java data type – integer
            • File file read and write
            • PAT B class 1022 d into the A+B
            • Line-Height and Font-Size relationship
            • WeChat computer
            • ZOJ4136 Escape Plan (shortest circuit)
            • Java multi-threaded programming mode combat guide 1: Active Object mode (below)

            Related Tags

            • udp
            • Windows
            • git
            • Step on the pit
            • Abnormal and actual problem handling plan
            • kubernetes
            • Connection reset
            • ingress
            • With a note
            • Daily essay
            NeferSky

            Постоялец

            ru
            Offline Offline

            Бессмертный


            Первое что в глаза бросилось, это ссылка, начинается с “http”. Хм.. Или и так работать должно?
            Также рекомендуют не путать х32 и х64 версии Open SSL Indy.

            Эээ… где ‘http’? У меня везде ‘https‘ указано, он мне и нужен.
            По поводу х32-х64 версий – ну, это, какбэ, само собой… Хотя, я во всех вариациях попробовал, в первом посте под спойлером можете посмотреть результаты попыток – со старыми версиями openssl, с новыми, со специально-индийскими, 32, 64, на разных ПК, ОСях, делфях…

            Порой на изучение всяких Delphi-компонент уходит гораздо больше времени, чем изучить матчасть напрямую. Касаемо данной проблемы – получить код https-страницы легко решается использованием, к примеру, стандартного WinHTTP, который хорошо описан в MSDN.

            Спасибо за указание направления, благодаря Вашей подсказке задачу решил. Получилось как-то так:

            procedure TForm1.Button1Click(Sender: TObject);
            const
              S_WIN_INET_ERROR = ‘Îøèáêà ïîäêëþ÷åíèÿ’;

            var
              Site: PAnsiChar;
              PagePath: PAnsiChar;
              PageText: String;
              Internet: HINTERNET;
              Session: HINTERNET;
              Request: HINTERNET;
              CountToRead: Cardinal;
              CountReaded: Cardinal;

            begin
              //www.cbr.ru
              Site := PAnsiChar(edtSite.Text);
              //currency_base/dynamics.aspx?VAL_NM_RQ=R01010&date_req1=21.10.2016&date_req2=28.10.2016&rt=1&mode=1
              PagePath := PAnsiChar(edtPagePath.Text);
              Memo1.Clear;

              try
                begin
                  Internet := InternetOpen(‘{164E3C3E-E4AF-4AE8-8644-CCBFEFC9ABD1}’,
                    INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
                  if Internet = nil then raise Exception.Create(S_WIN_INET_ERROR);

                  Session := InternetConnect(Internet, Site, INTERNET_DEFAULT_HTTP_PORT {INTERNET_DEFAULT_HTTPS_PORT},
                    nil, nil, INTERNET_SERVICE_HTTP, INTERNET_FLAG_SECURE, 0);
                  if Session = nil then
                    raise Exception.Create(S_WIN_INET_ERROR);

                  Request := HttpOpenRequest(Session, ‘GET’, PagePath, nil, nil, nil,
                    INTERNET_FLAG_RELOAD {or INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS} {or INTERNET_FLAG_SECURE}, 0);
                  if Request = nil then
                    raise Exception.Create(S_WIN_INET_ERROR);

                  if not HttpSendRequest(Request, ”, 0, nil, 0) then
                    raise Exception.Create(S_WIN_INET_ERROR);

                  while InternetQueryDataAvailable(Request, CountToRead, 0, 0) and (CountToRead > 0) do
                    begin
                      SetLength(PageText, CountToRead);
                      InternetReadFile(Request, @PageText[1], CountToRead, CountReaded);
                      Memo1.Text := Memo1.Text + PageText;
                    end;
                end;

              finally
                begin
                  if Request <> nil then InternetCloseHandle(Request);
                  if Session <> nil then InternetCloseHandle(Session);
                  if Internet <> nil then InternetCloseHandle(Internet);
                end;
              end;
            end;

            В заключение несколько вопросов по WinInet можно?
            1) Я ведь получаю страницу с https-сайта, стало быть, мне нужно использовать https-порт. Но если указать в InternetConnect() порт 443 – INTERNET_DEFAULT_HTTPS_PORT – то сервер отвечает ‘400 Bad Request, The plain HTTP request was sent to HTTPS port’. А если указывать 80 – INTERNET_DEFAULT_HTTP_PORT – то все работает как ожидается… Почему же тогда у меня порты наоборот? Сайт, на самом деле, доступен на 443 порту, а на 80 – нет, там все честно.
            2) В функции HttpOpenRequest() флаг INTERNET_FLAG_SECURE – должен, вроде бы, запускать работу SSL. Но если его добавить – приложение отправить реквест не может. А без него – отправляет, вполне себе хорошо.
            3) В функции HttpOpenRequest() флаг INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS – как именно его интерпретировать? MSDN: ‘Disables detection of this special type of redirect. When this flag is used, WinINet transparently allow redirects from HTTP to HTTPS URLs.’ Так если флаг выставлять – он “ignore” перенаправление в каком смысле – что он его “disables” (выключает и пофиг все) или он его “allow” (разрешает перенаправлять все подряд)? А черт его знает...
            ЗЫ: Основываясь на собственных вопросах – а правда, может, сайт SSL не использует, а просто придуряется?

            Добавить комментарий

            Ваш адрес email не будет опубликован. Обязательные поля помечены *