Asynchronous socket error 10053 ошибка

Некоторые пользователи Windows сталкиваются с кодом ошибки 10053 при попытке подключить свой компьютер с помощью почты SMTP или при попытке выполнить команду Winsock. Эта проблема обычно связана с ограничениями маршрутизатора, чрезмерно защищающими брандмауэрами или прокси-серверами и VPN.

Ошибка асинхронного сокета 10053

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

  • Прерывание соединения из-за вашей машины. Как оказалось, эта проблема может возникнуть из-за того, что в очереди сокета нет места, поэтому сокет не может получить дальнейшее соединение. Этот тип проблемы часто связан с активным прокси-сервером или сетью VPN, которые в конечном итоге занимают всю драгоценную очередь сокетов. В этом случае отключение или удаление прокси-сервера или VPN-клиента должно позволить вам решить проблему.
  • Недавно прерванное соединение — при определенных обстоятельствах эта проблема также может возникнуть, если система локальной сети прерывает соединение после сбоя передачи данных. В этом случае получатель никогда не подтверждает данные, отправленные через сокет данных. Обычно это вызвано чрезмерной защитой антивируса или брандмауэра.
  • Сценарий TCP / IP — проблемное соединение также может быть причиной этого кода ошибки, если оно истекает после того, как локальная система не получает подтверждения для отправленных данных. Если этот сценарий применим, сброс данных TCP / IP должен решить проблему и устранить код ошибки. Если это не сработает, вам следует перезагрузить или перезагрузить маршрутизатор или модем.

Метод 1. Отключение или удаление избыточных антивирусных программ (если применимо)

Если вы используете сторонний пакет, вы сталкиваетесь с кодом ошибки 10053 при попытке выполнить определенное действие, связанное с вашим почтовым клиентом (например, загрузка или отправка электронной почты через VPOP3), скорее всего, эта проблема вызвана вашим программа-антивирус.

По словам некоторых затронутых пользователей, эта проблема часто вызвана определенными версиями McAfee VirusScan и Norton Antivirus — это всего лишь две сторонние антивирусные программы, которые мы обнаружили, но может быть и другое программное обеспечение, вызывающее такую ​​же проблему.

Если этот сценарий выглядит так, как будто он может быть применим, вы должны начать с отключения защиты в реальном времени и посмотреть, перестает ли возникать код ошибки — в большинстве пакетов AV вы можете отключить защиту в режиме реального времени, щелкнув правой кнопкой мыши панель в трее. значок и ищет параметр, который отключит экраны в реальном времени.

Щелкните правой кнопкой мыши значок Avast на панели задач, чтобы временно отключить Avast

Если отключение защиты в реальном времени не привело к устранению проблемы, следуйте приведенным ниже инструкциям, чтобы удалить проблемный пакет со своего компьютера и удалить все остаточные файлы, чтобы устранить проблему:

  1. Откройте диалоговое окно «Выполнить», нажав клавиши Windows + R. Затем введите «appwiz.cpl» в текстовое поле и нажмите Enter, чтобы открыть меню «Программы и файлы».Введите appwiz.cpl и нажмите Enter, чтобы открыть страницу установленных программ.
  2. Зайдя в меню «Программы и компоненты», прокрутите список установленных программ и найдите проблемный антивирус или брандмауэр, вызывающий конфликт.
  3. Когда вы его увидите, щелкните его правой кнопкой мыши и выберите «Удалить» из появившегося контекстного меню, чтобы начать процесс удаления.Удаление антивируса
  4. После завершения операции перезагрузите компьютер и дождитесь завершения следующего запуска.
  5. После того, как компьютер загрузится, следуйте инструкциям, относящимся к вашему антивирусу, чтобы удалить все остаточные файлы, оставшиеся после установки стороннего антивируса.
  6. Как только вам удастся полностью удалить сторонний пакет безопасности из вашего AV, перейдите к следующему потенциальному исправлению ниже.

Если та же проблема все еще возникает после удаления вашего стороннего пакета или этот метод не применим, перейдите к следующему потенциальному исправлению ниже.

Метод 2: Выполнение полного сброса TCP / IP

Если код ошибки 10053 возникает сразу после разрыва соединения TCP / IP в Windows, скорее всего, это проблема с тайм-аутом передачи данных или ошибкой протокола. Как выясняется, это, скорее всего, вызвано сбоями в работе сетевого адаптера или классическим случаем неправильного диапазона DNS.

По словам некоторых затронутых пользователей, эту проблему иногда можно решить, выполнив полный сброс TCP / IP на каждом компьютере, входящем в состав локальной мастерской.

Если вы не знаете, как это сделать, следуйте приведенным ниже инструкциям, чтобы выполнить полный сброс TCP / IP из командной строки с повышенными привилегиями:

  1. Откройте диалоговое окно «Выполнить», нажав клавиши Windows + R. Затем введите cmd внутри текстового поля и нажмите Ctrl + Shift + Enter, чтобы открыть командную строку с повышенными правами. По запросу UAC (Контроль учетных записей пользователей) нажмите Да, чтобы предоставить доступ администратора.Запуск командной строки
  2. Как только вы войдете в командную строку с повышенными привилегиями, введите следующие команды по порядку и нажмите Enter после каждой, чтобы выполнить полный сброс TCP / IP: ipconfig / flushdns nbtstat -R nbtstat -RR netsh int reset all netsh int ip reset netsh winsock сброс настроек
  3. После успешной обработки каждой команды закройте командную строку с повышенными привилегиями и перезагрузите компьютер.
  4. После завершения следующего запуска повторите действие, которое ранее вызывало код ошибки 10053, и посмотрите, устранена ли проблема.

Метод 3: перезагрузка или сброс маршрутизатора / модема

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

По мнению некоторых затронутых пользователей, эта проблема также может возникать в тех случаях, когда ваш интернет-провайдер назначает динамический IP-адрес, который конфликтует с определенными параметрами SMTP.

В случае, если этот сценарий применим, есть два способа решить проблему и избежать получения кода ошибки 10053:

  • Перезагрузка сетевого устройства — эта операция завершит обновление TCP- и IP-соединения и заставит ваш маршрутизатор / модем назначить новую информацию, связанную с вашим подключением.
  • Сброс сетевого устройства — это очистит все пользовательские настройки, которые в настоящее время применяются вашим маршрутизатором или модемом, и вернет ваше сетевое устройство к заводским настройкам.

Если вы планируете или применяете этот метод, мы советуем начать с простого перезапуска и переходить ко второй процедуре только в том случае, если первое вспомогательное руководство (A) не решает проблему:

A. Перезагрузка роутера / модема

Если вы хотите решить проблему без сброса каких-либо конфиденциальных данных, которые в настоящее время хранятся на вашем маршрутизаторе или модеме, это способ сделать это.

Чтобы выполнить перезагрузку (перезагрузку) маршрутизатора, обратите внимание на заднюю часть сетевого устройства и нажмите кнопку включения / выключения, чтобы выключить устройство. После этого также отсоедините кабель питания от розетки, к которой он в данный момент подключен, и подождите целую минуту, чтобы убедиться, что силовые конденсаторы полностью разряжены.

Перезагрузка роутера

После того, как вам удастся перезапустить маршрутизатор, обязательно отключите кабель питания и подождите целую минуту, чтобы убедиться, что силовые конденсаторы полностью разряжены, прежде чем возобновлять питание.

По истечении этого периода повторно подключите кабель питания и дождитесь восстановления доступа к Интернету, прежде чем повторять действие, которое ранее вызывало код ошибки.

Если та же проблема все еще возникает, перейдите к следующему потенциальному исправлению ниже.

Б. Сброс маршрутизатора / модема

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

В этом случае вам следует сбросить маршрутизатор или модем до заводского состояния, восстановить доступ в Интернет и посмотреть, закончится ли эта операция исправлением ошибки 10053.

Важно: прежде чем принудительно выполнить эту операцию, имейте в виду, что в конечном итоге будут удалены все настройки, которые вы ранее установили для своего маршрутизатора. Это будет включать любые сохраненные учетные данные PPPoE, внесенные в белый список или заблокированные сообщения и перенаправленные данные TCP / IP.

Чтобы инициировать сброс маршрутизатора или модема, найдите кнопку сброса (обычно она находится на задней панели маршрутизатора). Когда вам удастся найти его, нажмите кнопку сброса и удерживайте ее нажатой в течение 10 секунд или пока не заметите, что все светодиоды устройства мигают одновременно.

Сброс маршрутизатора

Примечание. Для большинства моделей маршрутизаторов вам понадобится острый предмет, чтобы можно было нажать и удерживать кнопку сброса.

После завершения процедуры сброса дождитесь восстановления доступа к Интернету, затем посмотрите, исправлен ли теперь код ошибки 10053. Имейте в виду, что если ваш интернет-провайдер использует PPPoE, вам нужно будет повторно вставить правильные учетные данные, прежде чем доступ в Интернет будет восстановлен.

Если этот сценарий неприменим или вы уже пробовали это безуспешно, перейдите к следующему потенциальному исправлению ниже.

Метод 4: отключите прокси или VPN-соединение (если применимо)

Если ни один из вышеперечисленных методов не устранил проблему в вашем случае, и вы используете VPN-клиент или прокси-сервер, чтобы скрыть происхождение вашего подключения, это, скорее всего, является источником ошибки 10053.

Нам удалось найти множество пользовательских отчетов, в которых утверждалось, что эта конкретная ошибка была вызвана либо клиентом VPN, либо прокси-сервером, который был принудительно применен на системном уровне.

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

Мы рассмотрели оба возможных сценария, поэтому не стесняйтесь следовать одному из нижеприведенных руководств, чтобы отключить прокси-сервер системного уровня или удалить VPN-клиент:

A. Удаление VPN на уровне системы

  1. Нажмите клавишу Windows + R, чтобы открыть диалоговое окно «Выполнить». Как только вы окажетесь внутри, введите appwiz.cpl в текстовое поле и нажмите Enter, чтобы открыть меню «Программы и компоненты». Когда вам будет предложено UAC (Контроль учетных записей пользователей), нажмите Да, чтобы предоставить доступ администратора.Введите appwiz.cpl и нажмите Enter, чтобы открыть страницу установленных программ.
  2. Как только вы окажетесь на экране «Программы и компоненты», найдите VPN-клиент в списке установленных приложений. Когда вы найдете его, щелкните его правой кнопкой мыши и выберите «Удалить» из появившегося контекстного меню.Удаление инструмента VPNУдаление инструмента VPN
  3. Находясь внутри экрана установки, следуйте инструкциям на экране, чтобы завершить процесс установки, затем перезагрузите компьютер после завершения операции и посмотрите, будет ли проблема устранена после завершения следующего запуска.

Б. Отключение прокси-сервера

  1. Откройте диалоговое окно «Выполнить», нажав клавиши Windows + R. Внутри текстового поля введите inetcpl.cpl и нажмите Enter, чтобы открыть вкладку «Свойства Интернета». Когда вам будет предложено UAC (Контроль учетных записей пользователей), нажмите Да, чтобы предоставить доступ администратора.Диалог запуска: inetcpl.cplДиалог запуска: inetcpl.cpl
  2. Как только вы окажетесь на экране свойств Интернета, перейдите на вкладку «Подключение» в горизонтальном меню в верхней части экрана, затем нажмите «Настройки локальной сети» (прямо под настройками локальной сети).
    Откройте настройки LAN в Internet Options
  3. Как только вы войдете в настройки локальной сети (LAN), войдите в категорию прокси-серверов и снимите флажок, связанный с Use a proxy server for your LAN.
    Отключение прокси-сервера
  4. После успешного отключения прокси-сервера перезагрузите компьютер и посмотрите, будет ли проблема устранена после завершения следующего запуска.

Some Windows users are encountering the 10053 error code while trying to connect their computer with an SMTP mail or when trying to perform a Winsock command. This problem is typically linked to router restrictions, overprotective firewalls or Proxies, and VPNs.

Asynchronous Socket Error 10053

After investigating this particular issue, it turns out that there are several different causes that might be causing this error code. Here’s a shortlist of potential culprits:

  • Connection abort caused by your machine – As it turns out, this problem might occur because there is no space in the socket’s queue, so the socket cannot receive further connection. This type of issue is often related to an active Proxy or VPN network that end up taking up all the precious socket queue. In this case, disabling or uninstalling the Proxy server or VPN client should allow you to fix the issue.
  • Recently aborted connection – Under certain circumstances, this problem can also occur if the local network system aborts a connection after data transmission fails. In this case, the receiver never acknowledges data sent on a data socket. This is typically caused by an overprotective antivirus or firewall.
  • TCP / IP scenario – A troublesome connection can also be responsible for this error code if it timeouts after the local system doesn’t receive an acknowledgment for data sent. If this scenario is applicable, resetting your TCP / IP data should fix the problem and eliminate the error code. If this doesn’t work, you should reboot or reset your router or modem instead.

Method 1: Disabling or Uninstalling Overprotective AV suites (if applicable)

If you’re using a 3rd party suite you’re encountering the 10053 error code when trying to perform a certain action having to do with your email client (like downloading or sending email via VPOP3), chances are this issue is being caused by your antivirus software.

According to some affected users, this problem is often caused by certain versions of McAfee VirusScan and Norton Antivirus – These are just two 3rd party AV that we discovered, but there might be other software causing the same kind of problem.

If this scenario looks like it could be applicable, you should start by disabling the real-time protection and seeing if the error code stops occurring – with most AV suites, you can disable the real-time protection by right-clicking the tray-bar icon and looking for an option that will disable the real-time shields.

Right Click Avast Icon From System Tray To Disable Avast Temporarily

If disabling the real-time protection didn’t end up fixing the issue, follow the instructions below to uninstall the problematic suite from your computer and clear any remnant file to fix the problem:

  1. Open up a Run dialog box by pressing Windows key + R. Next, type ‘appwiz.cpl’ inside the text box and press Enter to open up the Programs and Files menu.
    Type appwiz.cpl and Press Enter To Open Installed Programs Page
  2. Once you’re inside the Programs and Features menu, scroll down through the list of installed programs and locate the problematic Antivirus or Firewall solution that’s causing the conflict.
  3. When you see it, right-click on it and choose Uninstall from the newly appeared context menu to begin the uninstallation process.
    Uninstalling your antivirus
  4. Once the operation is complete, reboot your computer and wait for the next startup to complete.
  5. After your computer boots back up, follow the instructions specific to your Antivirus to remove any remnant files left behind by your 3rd party Antivirus installation.
  6. Once you manage to completely remove your 3rd party security suite from your AV, move down to the next potential fix below.

If the same problem still occurs after uninstalling your 3rd party suite or this method is not applicable, move down to the next potential fix below.

Method 2: Performing a Complete TCP / IP reset

If the 10053 error code occurs right after the TCP / IP connection is aborted by Windows, this is most likely a problem with the data transmission timeout or protocol error. As it turns out, this is most likely caused by a glitch with the network adapter or a classic case of bad DNS range.

According to some affected users, this problem can sometimes be fixed by performing a complete TCP / IP reset on every computer that’s part of the local workshop.

If you’re not sure how to do this, follow the instructions below to perform a complete TCP / IP reset from an elevated Command Prompt:

  1. Open up a Run dialog box by pressing Windows key + R. Next, type ‘cmd’ inside the text box and press Ctrl + Shift + Enter to open up an elevated Command Prompt. When prompted by the UAC (User Account Control), click Yes to grant admin access.
    Running the Command Prompt
  2. Once you’re inside the elevated Command Prompt, type the following commands in order and press Enter after each one to do a complete TCP / IP reset:
    ipconfig /flushdns
    nbtstat -R
    nbtstat -RR
    netsh int reset all
    netsh int ip reset
    netsh winsock reset
  3. After every command is processed successfully, close the elevated Command Prompt and reboot your computer.
  4. Once the next startup is complete, repeat the action that was previously causing the 10053 error code and see if the problem is now fixed.

Method 3: Rebooting or Resetting your router/modem

If the Winsock commands above didn’t fix the problem in your case, you should proceed by excluding your current network from the list of potential culprits.

According to some affected users, this problem is also expected to occur in instances where your ISP (Internet Service Provider) assigns a dynamic IP that conflicts with certain SMTP options.

In case this scenario is applicable, there are 2 ways to fix the problem and avoid getting the 10053 error code:

  • Restarting the network device – This operation will end up refreshing the TCP and IP connection and force your router/modem to assign new information related to your connection.
  • Resetting the network device – This will clear any custom settings your router or modem is currently enforcing and return your network device to its factory settings.

If you’re planning or enforcing this method, our advice to start with a simple restart and move out to the second procedure only if the first sub-guide (A) doesn’t fix the problem:

A. Restarting your router/modem

If you want to fix the problem without resetting any sensitive data that’s currently stored by your router or modem, this is the way to do it.

In order to perform a router reboot (restart), turn your attention to the rear part of your network device and press the On / Off button to power off the device. After you do this, also disconnect the power cable from the power outlet it’s currently connected to and wait for a full minute in order to ensure that the power capacitors are completely drained.

Rebooting Router

After you manage to restart your router, make sure to disconnect the power cable and wait for a full minute to ensure that the power capacitors are completely drained before restoring power.

Once the period is passed, re-connect the power cable and wait until the Internet access is re-established before repeating the action that was causing the error code before.

If the same problem is still occurring, move down to the next potential fix below.

B. Resetting your router/modem

If the first method didn’t work in your case, chances are you’re dealing with a more serious inconsistency that is rooted inside the settings menu of your router or modem.

In this case, you should reset your router or modem to its factory state, restore internet access, and see if this operation ends up fixing the 10053 error.

Important: Before you enforce this operation, keep in mind that it will end up clearing any settings that you have previously established for your router. This will include any saved PPPoE credentials, whitelisted or blocked posts, and forwarded TCP / IP data.

To initiate a router or modem reset, look for the reset button (typically located on the back of your router). When you manage to locate it, press the Reset button and keep it presses for 10 seconds or until you notice all the device LEDs flashing at the same time.

Resetting Router

Note: With most router models, you will need a sharp object in order to be able to press and hold on the Reset button.

After the reset procedure is complete, wait until the Internet access is re-established, then see if the 10053 error code is now fixed. Keep in mind that if your ISP is using PPPoE, you will need to re-insert the correct credentials before Internet access is restored.

If this scenario was not applicable or you already tried this with no success, move down to the next potential fix below.

Method 4: Disable Proxy or VPN connection (if applicable)

If none of the methods above have fixed the issue in your case and you’re using a VPN client or a Proxy server to hide the origin of your connection, this is most likely the source of the 10053 error.

We managed to find a lot of user reports claiming this particular error was caused either by a VPN client or a proxy server that was enforced at a system level.

Depending on the anonymity solution that you’re using, you should be able to fix the problem either by disabling the proxy server or by uninstalling the system level VPN altogether.

We’ve covered both potential scenarios, so feel free to follow one of the sub-guides below to either disable the system-level proxy server or uninstall the VPN client:

A. Uninstalling System-level VPN

  1. Press Windows key + R to open up a Run dialog box. Once you’re inside, type ‘appwiz.cpl’ inside the text box and press Enter to open up the Programs and Features menu. When you are prompted by the UAC (User Account Control), click Yes to grant admin access.
    Type appwiz.cpl and Press Enter To Open Installed Programs Page
  2. Once you’re inside the Programs and Features screen, find the VPN client among the list of installed applications. When you find it, right-click on it and choose Uninstall from the newly appeared context menu.Uninstalling a VPN tool
    Uninstalling a VPN tool
  3. From the insides of the installation screen, follow the on-screen prompts to complete the installation process, then reboot your computer once the operation is complete and see if the issue is fixed once the next startup is complete.

B. Disabling the Proxy Server

  1. Open up a Run dialog box by pressing Windows key + R. Inside the text box, type ‘inetcpl.cpl’ and press Enter to pen up the Internet Properties tab. When you’re prompted by the UAC (User Account Control), click Yes to grant admin access.Run dialog: inetcpl.cpl
    Run dialog: inetcpl.cpl
  2. Once you’re inside the Internet Properties screen, go over the Connection tab from the horizontal menu on the top of the screen, then click on LAN Settings (right under Local Area Network LAN settings).
    Open LAN settings in Internet Options
  3.  Once you’re inside the Local Area Network (LAN) settings, access the Proxy server category and uncheck the box associated with Use a proxy server for your LAN.
    Disabling the Proxy server
  4. After you have successfully disabled the Proxy server, reboot your computer and see if the problem is fixed once the next startup is complete.

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    [!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь

    >
    Ошибка сокета 10053
    , Возникает при отключении клиента.

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



    Сообщ.
    #1

    ,
    27.10.05, 09:55

      Пишу приложение на TServerSocket и TClientSocket

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

      ExpandedWrap disabled

         if( TcpAgentClient->Connect())

            {

             TcpAgentClient->Disconnect();

              ShowMessage(«Ok»);

            }

            else

            {

               ShowMessage(«Connected FAILURE!!!»);

            };

      Тоесть и клиент и сервер правильно реагируют.
      Ошибка возникает когда программа сервер подает запрос на то, чтоб клиент отключился. ТОесть она передает сообщение, типа «Заверши работу», клиент его обрабатывает и завершает работу, и вот в этот момент сервер выдает ошибку сокета Asynchronous socket error 10053
      Вот код обработки сообщения:

      ExpandedWrap disabled

        if (Command==»SERVER_Stop_job»)

           {

            if (m_tcpClient->Active)

            {

              m_tcpClient->Close();

            };

           };

      При этом на сервере событие OnDisconnect не происходит и сервер подключение не закрывает. А клиент не выдает никаких ошибок и закрывает соединение.

      Помогите, может советом, может кодом.

      з.ы.
      m_tcpClient и TcpAgentClient это ссылки на один и тот же компонент. TcpAgentClient лежит на форме, m_tcpClient член класса.

      Сообщение отредактировано: Krai — 27.10.05, 09:56


      Oleg2004



      Сообщ.
      #2

      ,
      27.10.05, 10:32

        Krai
        WSAECONNABORTED ECONNABORTED 10053
        Так и есть, соединение прервано


        exodus



        Сообщ.
        #3

        ,
        27.10.05, 11:15

          Обрабатывай ивент сокета OnError(eeDisconnet).


          Krai



          Сообщ.
          #4

          ,
          28.10.05, 04:18

            Тоесть предлагаете написать код со следующией логикой:
            На сервере:
            1. Если происходит событие onDisconect, то убираем из списка клиентов, того клиента кто вызвал это событие
            2. Если происходит ошибка 10053, то тоже убирать из списка.

            А ведь всед за 10053, через некоторый промежуток времени происходит ошибка 10054 (Удаленый хост принудительно разоравал соединение).

            Да дело то не в том, что б отловить ошибку и погасить её (ErrorCode=0), а в том, что я хочу понять почему один и тот же код вызываемый в разных местах программы, в разные промежутки времени, в одном случаие на сервере проходит корректно, а в другом случаие вызывает ексепшн.

            Может дело из-за того, что у меня во второй раз метод Close() вызывается из класса который вертится в отдельном потоке?
            Но я пробовавал следующее: я создал метод класса Disc(), который вызвает метод Close() сокета, и вызывал Disc() с того места где все проходит нормально, и ошибок не возникало !

            В чем проблема то?


            Oleg2004



            Сообщ.
            #5

            ,
            28.10.05, 06:13

              Krai
              Вариантов может быть куча.
              Я не особенный спец в Дельфи, но вот тут
              описана ситуация близкая к вашей.
              Комбинаций может быть несколько, при который происходит выдача 53-ей ошибки
              53 ошибка связана с неприходом ACK от клиента или приемом FIN от клиента или с комбинациями с ними связанными.
              Причем тут комбинации? А при том, что модуль TCP- это конечный логический автомат с четко заданными состояниями, и все зависит от того, в каком состоянии был автомат, когда возникла та или иная ситуация — в результате событие вроде одно, а реакций может быть несколько — ну это так, «на пальцах»
              А 54-ая — это уже посылка RST — значит клиент вдогонку еще послал и его
              Механизм описан ниже:

              Цитата

              WSAECONNABORTED (10053) Software caused connection abort.
              Berkeley description: A connection abort was caused internal to your host machine. The software caused a connection abort because there is no space on the socket’s queue and the socket cannot receive further connections.
              WinSock description: Partly the same as Berkeley. The error can occur when the local network system aborts a connection. This would occur if WinSock aborts an established connection after data retransmission fails (receiver never acknowledges data sent on a datastream socket).
              TCP/IP scenario: A connection will timeout if the local system doesn’t receive an (ACK)nowledgement for data sent. It would also timeout if a (FIN)ish TCP packet is not ACK’d (and even if the FIN is ACK’d, it will eventually timeout if a FIN is not returned).
              User suggestions: There are a number of things to check, that might help to identify why the failure occurred. Basically, you want to identify where the problem occurred.
              · Ping the remote host you were connected to. If it doesn’t respond, it might be off-line or there may be a network problem along the way. If it does respond, then this problem might have been a transient one (so you can reconnect now), or the server application you were connected to might have terminated (so you might not be able to connect again).
              · Ping a local host to verify that your local network is still functioning (if on a serial connection, see next step)
              · Ping your local router address. If you’re on a serial connection, your local router is the IP address of the host you initially logged onto with SLIP or PPP.
              · Ping a host on the same subnet as the host you were connected to (if you know one). This will verify that the destination network is functioning.
              · Try a «traceroute» to the host you were connected to. This won’t reveal too much unless you know the router addresses at the remote end, but it might help to identify if the problem is somewhere along the way.

              WSAECONNRESET (10054) Connection reset by peer.
              Berkeley description: A connection was forcibly closed by a peer. This normally results from a loss of the connection on the remote socket due to a timeout or a reboot.
              WinSock description: Same as Berkeley. On a datastream socket, the connection was reset. This reset could be generated locally by the network system when it detects a connection failure, or it might be received from the remote host (in TCP terms, the remote host sent a RST packet). This error is also possible on a datagram socket; for instance, this error could result if your application sends a UDP datagram to a host, which rejects it by responding with an ICMP Port Unreachable.
              User suggestions: Some network systems have commands to report statistics. In this case, it might be possible to check the count of TCP RST packets received, or ICMP Port Unreachable packets. See other suggestions under WSAECONNABORTED.

              Сообщение отредактировано: Oleg2004 — 28.10.05, 06:24


              Krai



              Сообщ.
              #6

              ,
              28.10.05, 10:34

                Поборол таки.
                Вообщем дело было так:
                После того, как сервер отправляет команду на отключение, он еще (за спиной) посылает три пакета, а так как я по получении команды отключиться, в клиенте сразу отключался, естесвенно сервер не мог эти три пакета доставить. Вот и байда.

                Спасибо Oleg2004, навел на нужные мысли.

                Сообщение отредактировано: Krai — 28.10.05, 10:34


                Krai



                Сообщ.
                #7

                ,
                10.11.05, 10:56

                  10.11.2005 Разобрался окончательно!!!
                  Никаких три служебных сообщения он не посылает. Все проблемы были из-за того, что на сервере и клиенте у меня сообщения имели разную длину. На клиенте длиньше, чем на сервере.
                  Понял из-за того, что столкнулся с другой проблемой, когда подряд отправляется много сообщений клиенту, вот там и стало видно, что происходит смещение.Как привел длину сообщений к одному значению, нужда в получении «трех дополнительных» сама собой отпала. Вот так вот.

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

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

                  • Предыдущая тема
                  • Borland C++ Builder/Turbo C++ Explorer
                  • Следующая тема

                  Рейтинг@Mail.ru

                  [ Script execution time: 0,0238 ]   [ 16 queries used ]   [ Generated: 3.06.23, 19:50 GMT ]  

                  Zerorc

                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  1

                  08.07.2014, 11:50. Показов 8386. Ответов 18

                  Метки нет (Все метки)


                  Студворк — интернет-сервис помощи студентам

                  Всем привет. Сразу к делу. Работаю с компонентом ServerSocket, при приеме данных возникает asynchronous socket error 10053.
                  Сервер работает в режиме stNonBlocking, клиент — постоянно посылает какую-то информацию. Задача — принять и обработать. Интервал между посылками, примерно 20ms а размер пакета 150 байт.

                  C++
                  1
                  2
                  
                  std::vector <unsigned char> dataAll; //приемный контейнер
                  BYTE buf[2000];                 //переменный буфер
                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  
                  void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
                        TCustomWinSocket *Socket)
                  {
                          length = ServerSocket1->Socket->Connections[0]->ReceiveLength();
                          ServerSocket1->Socket->Connections[0]->ReceiveBuf(buf, length);
                          dataAll.resize(dataAll.size() + length);
                          memcpy(&dataAll[dataAll.size() - length], &buf, length);
                          lengthAll+=length; Form1->Edit2->Text = lengthAll;

                  Принимаю в контейнер, таким вот способом, по событию чтения клиента. Так вот, открываю порт, слушаю, жду connect’a, пока все в порядке. Но как только клиент подключается, он сразу же начинает забрасывать потоком данных и не успев принять, возникает error 10053.
                  Какие есть варианты? Быть может прописать что-то в OnClientError, помимо ErrorCode = 0.



                  0



                  Programming

                  Эксперт

                  94731 / 64177 / 26122

                  Регистрация: 12.04.2006

                  Сообщений: 116,782

                  08.07.2014, 11:50

                  18

                  735 / 525 / 130

                  Регистрация: 31.05.2013

                  Сообщений: 2,929

                  Записей в блоге: 3

                  08.07.2014, 14:29

                  2

                  Скорее всего не хватает выделенной памяти на прием в Вашем «контейнере»



                  0



                  Zerorc

                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  08.07.2014, 17:41

                   [ТС]

                  3

                  Так Вектор в том-то и дело что сам наращивается и ему все равно какой длинны он будет, пока не займет в теории всю оперативную память компьютера.
                  Другое дело что массив в векторе в памяти идет как бы подряд и если какой-то участок памяти на его доблестном разрастании занят, то он переносит весь вектор в новый участок плюс резервирует место, при каждом наращивании все больше и больше.
                  Проблема в том что как только клиент присоединяется, моментально вылетает ошибка или вовсе программа убивается виндой. Не понимаю почему так.

                  Добавлено через 2 часа 21 минуту
                  Попробовал стандартный чатик из Examples в builder. Все великолепно принимает, простой как палка.

                  C++
                  1
                  2
                  3
                  4
                  5
                  
                  void __fastcall TChatForm::ServerSocketClientRead(TObject *Sender,
                        TCustomWinSocket *Socket)
                  {
                    Memo2->Lines->Add(Socket->ReceiveText());  
                  }

                  Опять же проблема значится в алгоритме записи моем. У кого есть какие идеи как записать, если не с помощью вектора. В принципе, мне ведь все равно, идут данные подряд в памяти или нет. Можно использовать и контейнеры с указателем на следующую ячейку. Может повозиться с динамическим буфером, второй побольше создать, туда перенести, как заполнен первый а потом удалить его. Есть-какие предложения?
                  Или использовать ReceiveText, загонять в string, а после уже разбивать как захочу?
                  Но разве это из-за ReceiveBuf() запара? Или все-таки с вектором перемудрил?



                  0



                  Dinkin

                  735 / 525 / 130

                  Регистрация: 31.05.2013

                  Сообщений: 2,929

                  Записей в блоге: 3

                  08.07.2014, 18:13

                  4

                  можно попробовать так

                  C
                  1
                  2
                  3
                  
                  int len = ServerSocket1->Socket->ReceiveLength();
                  char* buf= new char[len+1];
                  ServerSocket1->Socket->ReceiveBuf((void*)buf, len);



                  1



                  91 / 91 / 22

                  Регистрация: 02.07.2013

                  Сообщений: 332

                  09.07.2014, 10:21

                  5

                  Dinkin, прежде, чем ковыряться в коде, имеет смысл ознакомиться с самой ошибкой. 10053 означает «удалённый компьютер закрыл подключение». Из-за чего-то. Т.е., при попытке доступа к сокету, соединение уже разорвано. Думаю, надо смотреть клиента…



                  0



                  735 / 525 / 130

                  Регистрация: 31.05.2013

                  Сообщений: 2,929

                  Записей в блоге: 3

                  09.07.2014, 11:46

                  6

                  Цитата
                  Сообщение от c0rvax
                  Посмотреть сообщение

                  смысл ознакомиться с самой ошибкой. 10053 оз

                  Так он же пишет, что при нормальной отправке данных все норм…а данная ошибка в основном распространяется на сервер, который закрывает соединение, если что-то не успел/не смог обработать по какой-либо причине.



                  0



                  c0rvax

                  91 / 91 / 22

                  Регистрация: 02.07.2013

                  Сообщений: 332

                  09.07.2014, 12:03

                  7

                  Dinkin, можешь, конечно, остаться при своих. А можешь показать код, как происходит отправка. Или хотя бы сделай предварительную проверку, активно ли подключение

                  C++
                  1
                  2
                  3
                  4
                  
                  if( ServerSocket1->Socket->Connections[0]->Connected )
                  {
                    ...
                  }



                  0



                  735 / 525 / 130

                  Регистрация: 31.05.2013

                  Сообщений: 2,929

                  Записей в блоге: 3

                  09.07.2014, 13:05

                  8

                  так я то че, не мне же помогать,с меня за чем код?) а парень свой код выше показал, при каких случаях у него ошибка



                  0



                  Zerorc

                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  10.07.2014, 11:03

                   [ТС]

                  9

                  Клиент, это плата, подсоединенная к чипу Withnet Ethernet W5100, она просто кидает connect и если сервер отвечает, начинает забрасывать данные. Дело в том что другая прога, которую я писал на Delphi, работает, хотя в builder’e сделал все аналогично, за исключением вектора. Там был статический буфер, набиваемый до конца, а после закрывающий соединение. И еще, как я понял Indy server работает в Thread blocking а Server socket в nonBlocking.
                  Теперь же задача стоит в том, что мы не знаем сколько будет данных, поэтому и вектор. Плата шлет огромное количество попыток connect() и как только получает ответ, начинает кидать данные.

                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  
                  void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
                        TCustomWinSocket *Socket)
                  {
                          mLog->SelAttributes->Color = clBlue;
                          mLog->Lines->Add("[" + TimeToStr(Time()) + "] подключен: " + ServerSocket1->Socket->Connections[0]->RemoteAddress);
                          Edit1->Text = Form1->ServerSocket1->Socket->Connections[0]->RemoteAddress;
                   
                  }

                  Особенность только в работе с платой, но дело ведь в том что на другой проге все ок, а с этими сокетами ошибки лезут вот такие.

                  Добавлено через 5 минут
                  И я тут подумал, если попыток connect’а много, пока сеть обнаружится, все дела, ведь до подачи питания на плату, сети-то и нет. Так вот, приходит сразу 10 коннектов, у меня не предусмотрена работа с несколькими соединениями. Сервер видит их как много клиентов и открывает столько потоков, сколько пришло connect(). А после и ложится, ибо я работаю только с Connections[0]. Больше не предусмотрел, все равно клиент всегда один.
                  В ThreadBlocking все идет одним потоком и ему до лампочки сколько connect() он получил. Начал, отработал и дисконнектнул клиента.



                  0



                  91 / 91 / 22

                  Регистрация: 02.07.2013

                  Сообщений: 332

                  10.07.2014, 12:24

                  10

                  Zerorc, ну, какие мысли. Во-первых, «буфер, набиваемый до конца, а после закрывающий соединение» — это уже неправильно. Соединение не следует закрывать, пока программа работает. Общая логика такова: открыли один раз соединение, набиваем буфер, набили отправили, очистили буфер, снова набиваем. И ничего не закрываем, соединение всегда установлено. Практика показывает, что команда на закрытие соединения может придти гораздо быстрее, чем отправляемый буфер данных. И в тот момент, когда сервер начинает что-то пытаться читать из сокета, последний уже закрыт, а то и NULL. Отсюда и ошибка 10053 возникает «удалённый компьютер закрыл подключение».

                  Во-вторых, совершенно правильная мысль, что неверно обращаться к Connections[0]. Для того, чтобы серверу однозначно правильно что-то читать из сокетов, надо использовать передаваемый в событие OnClientRead параметр Socket, ибо это именно он готов отдать какие-то данные. А самих активных подключений [ServerSocket->ActiveConnections] может быть великое множество.



                  1



                  Zerorc

                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  10.07.2014, 12:37

                   [ТС]

                  11

                  Дело в том что так было в прошлой программе и все работало, теперь я не закрываю соединение, к тому же там буфер был действительно огромный и мог принять большой обьем информации. Знаю, что лучше в файл, потом очищать буфер, дописывать в файлик и тд.

                  Переделал код таким вот образом

                  C++
                  1
                  
                   int concnt = -1; //счетчик действующих клиентов. Глобально
                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  
                  void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
                        TCustomWinSocket *Socket)
                  {
                           concnt++;
                          mLog->SelAttributes->Color = clBlue;
                          mLog->Lines->Add("[" + TimeToStr(Time()) + "] подключен: " + ServerSocket1->Socket->Connections[concnt]->RemoteAddress);
                          Edit1->Text = Form1->ServerSocket1->Socket->Connections[concnt]->RemoteAddress;
                  }
                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  
                  void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
                        TCustomWinSocket *Socket)
                  {
                          mLog->SelAttributes->Color = clGray;
                          mLog->Lines->Add("[" + TimeToStr(Time()) + "] отключен: " + ServerSocket1->Socket->Connections[concnt]->RemoteAddress);
                          GraphTimer->Enabled = false;
                          concnt--;
                  }
                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  
                  void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
                        TCustomWinSocket *Socket)
                  {
                          unsigned len = ServerSocket1->Socket->Connections[concnt]->ReceiveLength();
                          BYTE* buf= new BYTE[len+1];
                          ServerSocket1->Socket->Connections[concnt]->ReceiveBuf((char*)buf, len);
                  dataAll.resize(dataAll.size() + len);
                          memcpy(&dataAll[dataAll.size() - len], buf, len);
                          lenAll+=len; Form1->Edit2->Text = lenAll;
                   
                          delete buf;

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



                  0



                  c0rvax

                  91 / 91 / 22

                  Регистрация: 02.07.2013

                  Сообщений: 332

                  10.07.2014, 12:58

                  12

                  Лучший ответ Сообщение было отмечено Zerorc как решение

                  Решение

                  Я говорил про это

                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  
                  void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
                        TCustomWinSocket *Socket)
                  {
                          unsigned len = Socket->ReceiveLength(); // сокет, который из параметров !!!
                          BYTE* buf= new BYTE[len+1];
                          Socket->ReceiveBuf((char*)buf, len);
                  dataAll.resize(dataAll.size() + len);
                          memcpy(&dataAll[dataAll.size() - len], buf, len);
                          lenAll+=len; Form1->Edit2->Text = lenAll;
                   
                          delete buf;



                  1



                  Zerorc

                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  10.07.2014, 13:49

                   [ТС]

                  13

                  Опа! А вот тут я не понял. Я беру получается, обращаясь к определенному соединению, которое, быть может, было когда-то но в данный момент его нет. И из-за этого ошибка 10053.

                  Но, когда я обращаюсь к активному соединению, посредством

                  C++
                  1
                  
                  unsigned len = Socket->ReceiveLength(); // сокет, который из параметров !!!

                  то данные я гарантированно получу. Так?

                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  
                          unsigned len = Socket->ReceiveLength();
                          BYTE* buf= new BYTE[len+1];
                          Socket->ReceiveBuf((char*)buf, len);
                          dataAll.resize(dataAll.size() + len);
                          memcpy(&dataAll[dataAll.size() - len], buf, len);
                          lenAll+=len; Form1->Edit2->Text = lenAll;
                   
                          delete buf;



                  0



                  91 / 91 / 22

                  Регистрация: 02.07.2013

                  Сообщений: 332

                  10.07.2014, 14:36

                  14

                  Connections[] — это все активные соединения сервера. Их может быть несколько, что понятно. На то он и сервер. Допустим их 10. И тут один из клиентов, скажем 5-й, присылает данные. Читать надо данные именно из этого сокета, а не из какого-то определённого. Для этого на него и передаётся в событийную функцию ссылка.



                  0



                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  10.07.2014, 14:41

                   [ТС]

                  15

                  Ага, все понятно. Я читал всегда с 0 соединения что в принципе было правильно, ибо клиент один и доколе соблюдение протокола оказывалось филигранным, так сказать, касаемо двух ПК, к примеру.
                  Но самопальная программа, которая посылает коннект пару сотен раз и может оказаться на любом Connections[?] имела все это ввиду.
                  И если я читаю

                  данные именно из этого сокета, а не из какого-то определённого

                  , то все в порядке)



                  0



                  91 / 91 / 22

                  Регистрация: 02.07.2013

                  Сообщений: 332

                  10.07.2014, 15:09

                  16

                  С 0 соединения можно читать, если клиент однозначно один и он регулярно не закрывает подключение. Допустим клиент отправил данные и закрыл подключение, а потом подключился ещё раз, чтобы ещё раз отправить. Так как всё это дело выполняется в некоем потоке, то вполне возможен вариант, что «старый», неиспользуемый уже сокет ещё не удалён из Connections[], ActiveConnections будет равен 2 и очередную порцию данных надо будет читать из Connections[1].



                  0



                  Zerorc

                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  10.07.2014, 15:15

                   [ТС]

                  17

                  Тогда правильный ли вариант с отправкой этому клиенту сообщения, если он регулярно может сбросить соединение, к примеру, после снова подключиться. Если я все правильно понял..

                  C++
                  1
                  2
                  3
                  4
                  5
                  
                  void __fastcall TForm1::Button3Click(TObject *Sender)
                  {
                  ... //проверки есть ли соединение, во избежание вылетов
                  Form1->ServerSocket1->Socket->Connections[ServerSocket1->Socket->ActiveConnections-1]->SendBuf(buff,100);
                  }

                  Я не могу считать событие ибо событие у меня здесь — это нажатие кнопочки. Единственный выход?



                  0



                  c0rvax

                  91 / 91 / 22

                  Регистрация: 02.07.2013

                  Сообщений: 332

                  10.07.2014, 15:36

                  18

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

                  C++
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  
                  void __fastcall TForm1::Button3Click(TObject *Sender)
                  {
                    for( int i = 0; i < ServerSocket1->Socket->ActiveConnections; i++ )
                    {
                      TCustomWinSocket* ASocket = ServerSocket1->Socket->Connections[ i ];
                      if( ASocket && ASocket->Connected )
                      {
                        ASocket->SendBuf( buff, 100 );
                      }
                    }
                  }



                  1



                  1 / 1 / 1

                  Регистрация: 14.03.2014

                  Сообщений: 46

                  10.07.2014, 15:51

                   [ТС]

                  19

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



                  0



                  IT_Exp

                  Эксперт

                  87844 / 49110 / 22898

                  Регистрация: 17.06.2006

                  Сообщений: 92,604

                  10.07.2014, 15:51

                  19


                  Форум программистов Vingrad

                  Поиск:

                  Ответ в темуСоздание новой темы
                  Создание опроса
                  > TClientSocket, автоподключение 

                  :(

                     

                  Опции темы

                  Гость_Игорь
                  Дата 11.10.2005, 11:34 (ссылка)
                     |    (голосов: 0)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Unregistered

                  Использую компонент TClientSocket для опроса контроллера по сети
                  При разрыве связи прога выдает сообщение
                  «Asynchronous socket error 10053».
                  Вопрос в следующем:
                  1. Как заставить прогу не выдавать это окно.
                  2. Каким образом организовать автоконнект при отсутствии связи.

                  Пробовал различные варианты с
                  Socket->Active = true
                  но ничего не получилось.
                  В Buildere не силен, а в сях заморишся нужное окно писать.
                  Спасибо

                    Вверх
                  _hunter
                  Дата 11.10.2005, 12:25 (ссылка)
                  | (нет голосов)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Эксперт
                  ****

                  Профиль
                  Группа: Участник Клуба
                  Сообщений: 8564
                  Регистрация: 24.6.2003
                  Где: Europe::Ukraine:: Kiev

                  Репутация: 24
                  Всего: 98

                  http://forum.vingrad.ru/index.php?showtopic=58171
                  http://forum.vingrad.ru/index.php?showtopic=58209
                  http://forum.vingrad.ru/index.php?showtopic=58521

                  ———————

                  Tempora mutantur, et nos mutamur in illis…

                  PM ICQ   Вверх
                  Гость_Игорь
                  Дата 11.10.2005, 14:15 (ссылка)
                     |    (голосов: 0)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Unregistered

                  1 ссылка) толковая, но самый интересный для меня вопрос без ответа
                  2 ссылка) не могу понять куда и чего вдолбить чтобы убрать ошибку

                  client.cpp

                  #include <vcl.h>
                  #pragma hdrstop
                  //—————————————————————————
                  USEFORM(«Unit1.cpp», Form1);
                  //—————————————————————————
                  WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
                  {
                  try
                  {
                  Application->Initialize();
                  Application->CreateForm(__classid(TForm1), &Form1);
                  Application->Run();
                  }
                  catch (Exception &exception)
                  {
                  Application->ShowException(&exception);
                  }
                  catch (…)
                  {
                  try
                  {
                  throw Exception(«»);
                  }
                  catch (Exception &exception)
                  {
                  Application->ShowException(&exception);
                  }
                  }
                  return 0;
                  }

                  на всякий случай код unit.cpp

                  #include <vcl.h>
                  #include <dos.h>
                  #pragma hdrstop

                  #include «Unit1.h»
                  //—————————————————————————
                  #pragma package(smart_init)
                  #pragma resource «*.dfm»
                  TForm1 *Form1;
                  //—————————————————————————
                  __fastcall TForm1::TForm1(TComponent* Owner)
                  : TForm(Owner)
                  {
                  MemoIn->Items->Clear();
                  MemoOnOff->Lines->Clear();

                  MySocket->Active = true;

                  }
                  //—————————————————————————

                  void __fastcall TForm1::MySocketRead(TObject *Sender,
                  TCustomWinSocket *Socket)
                  {
                  MemoIn->Items->Add(Socket->ReceiveText());
                  }
                  //—————————————————————————

                  void __fastcall TForm1::MySocketError(TObject *Sender,
                  TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
                  {
                  MemoOnOff->Lines->Clear();
                  MemoOnOff->Lines->Add(«Ñáîé ñîåäèíåíèÿ»);
                  // MySocket->Active = true;
                  }
                  //—————————————————————————

                  void __fastcall TForm1::MySocketConnecting(TObject *Sender,
                  TCustomWinSocket *Socket)
                  {
                  MemoOnOff->Lines->Clear();
                  MemoOnOff->Lines->Add(«Ñîåäèíåíèå óñòàíîâëåíî»);
                  }

                  3 ссылка) немного юмора для поднятия настроения

                    Вверх
                  _hunter
                  Дата 11.10.2005, 14:35 (ссылка)
                  | (нет голосов)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Эксперт
                  ****

                  Профиль
                  Группа: Участник Клуба
                  Сообщений: 8564
                  Регистрация: 24.6.2003
                  Где: Europe::Ukraine:: Kiev

                  Репутация: 24
                  Всего: 98

                  реакция на ошибку у тебя есть, значит осталось MySocket->Active = true; ( из __fastcall TForm1::TForm1(TComponent* Owner) ) в обработчик засунуть:
                  __fastcall TForm1::TForm1(TComponent* Owner)
                  : TForm(Owner)
                  {
                  MemoIn->Items->Clear();
                  MemoOnOff->Lines->Clear();
                  try
                  {
                  MySocket->Active = true;
                  }
                  catch(…)
                  {
                  }
                  }
                  и все…

                  ———————

                  Tempora mutantur, et nos mutamur in illis…

                  PM ICQ   Вверх
                  Гость_Игорь
                  Дата 11.10.2005, 17:36 (ссылка)
                     |    (голосов: 0)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Unregistered

                  Может еще что-то надо изменить?
                  ошибка выскакивает, после подключения сокет не востанавливается

                    Вверх
                  _hunter
                  Дата 11.10.2005, 17:58 (ссылка)
                  | (нет голосов)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Эксперт
                  ****

                  Профиль
                  Группа: Участник Клуба
                  Сообщений: 8564
                  Регистрация: 24.6.2003
                  Где: Europe::Ukraine:: Kiev

                  Репутация: 24
                  Всего: 98

                  выскакивает в билдере? тогда отключи останов на делфийских исключениях: Tolls->Debugger Options->Language Exceptions->Stop on Delphi Exceptions
                  а насчет востановления — скорее всего сокет пересоздать нужно будет… но не уверен

                  ———————

                  Tempora mutantur, et nos mutamur in illis…

                  PM ICQ   Вверх
                  Гость_Игорь
                  Дата 12.10.2005, 09:33 (ссылка)
                     |    (голосов: 0)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Unregistered

                  Ошибка выскакивает и в билдере и в готовом ехе
                  сделал следующее

                  void __fastcall TForm1::MySocketError(TObject *Sender,
                  TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
                  {
                  [b]MySocket->Active = false;[/b]
                  MemoOnOff->Lines->Clear();
                  MemoOnOff->Lines->Add(«Сбой подключения»);
                  }

                  повесил кнопку с MySocket->Active = true;

                  теперь после сообщения об ошибке нажав кнопку сокет востанавливается
                  можно ли в билдере сделать цикл или еще что-то типа:

                  1 создавать сокет до тех пор пока !ок
                  2 в случае сокетерор переход на 1

                  и как заставить не появлятся сообщение об ошибке «Asynchronous socket error 10053» или ему подобные(если неудача при попытке создания сокета цифры другие) smile
                  ведь в этом случае выполнение кода приостанавливается пока не нажмешь ок на «Asynchronous socket error 10053».
                  для меня это принципиальная задача, события с контроллера будут писатся в лог, в случае допустим «рестарт свитч», учета событий не будет пока кто-то не закроет сообщение об ошибке и нажмет «подключиться».
                  Странно. Я думал есть готовое решение, ведь такая задача может появится довольно часто.
                  Или надо использовать какие-то другие компоненты и функции билдера?
                  smile построение в билдере отличается от просто с++ в принципе

                    Вверх
                  Artemon
                  Дата 12.10.2005, 10:03 (ссылка)
                  | (нет голосов)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  а ты мне нравишься
                  ***

                  Профиль
                  Группа: Завсегдатай
                  Сообщений: 1771
                  Регистрация: 24.2.2004
                  Где: Челябинск

                  Репутация: 7
                  Всего: 20

                  В OnError сокета, устанавливай ErrorCode в NULL.
                  И тогда все случившееся ошибки будут игнорироваться, но не забывай также try и catch.

                  ———————

                  Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru

                  PM MAIL   Вверх
                  Гость_Игорь
                  Дата 12.10.2005, 14:41 (ссылка)
                     |    (голосов: 0)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Unregistered

                  спасибо hunter’у, Artemon’у и Бегемоту из поста
                  http://forum.vingrad.ru/index.php?showtopic=56125
                  (сам бы не додумался организовать цикл при помощи таймера)
                  Все работает как надо smile
                  1 создавать сокет до тех пор пока !ок
                  2 в случае сокетерор переход на 1

                  НИКАКИХ сообщений об ошибке сокета больше не вылетает

                  даю код, мож кому пригодится

                  //—————————————————————————

                  #include <vcl.h>
                  #include <dos.h>
                  #pragma hdrstop

                  #include «Unit1.h»
                  //—————————————————————————
                  #pragma package(smart_init)
                  #pragma resource «*.dfm»
                  TForm1 *Form1;
                  //—————————————————————————
                  __fastcall TForm1::TForm1(TComponent* Owner)
                  : TForm(Owner)
                  {
                  MemoOnOff->Lines->Clear();
                  try
                  {
                  MySocket->Active = true;
                  }
                  catch(…)
                  {
                  }

                  }
                  //—————————————————————————

                  void __fastcall TForm1::MySocketRead(TObject *Sender,
                  TCustomWinSocket *Socket)
                  {
                  MemoIn->Items->Add(Socket->ReceiveText());
                  }
                  //—————————————————————————

                  void __fastcall TForm1::MySocketError(TObject *Sender,
                  TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
                  {
                  ErrorCode = NULL; //одна строка и в случае ошибок сокета никаких прерываний в работе!
                  MySocket->Active = false; //без этой строки сокет не востановишь
                  MemoOnOff->Lines->Clear();
                  MemoOnOff->Lines->Add(«Ñáîé ñîåäèíåíèÿ»);
                  MemoIn->Items->Add(«Ñáîé ñîåäèíåíèÿ»);
                  Timer1->Enabled=true; //запускаем цикл автоподключений
                  }
                  //—————————————————————————

                  void __fastcall TForm1::MySocketConnecting(TObject *Sender,
                  TCustomWinSocket *Socket)
                  {
                  MemoOnOff->Lines->Clear();
                  MemoOnOff->Lines->Add(«Ñîåäèíåíèå óñòàíîâëåíî»);
                  }
                  //—————————————————————————

                  void __fastcall TForm1::Timer1Timer(TObject *Sender)
                  //в свойстве интервал не забудте выставить время.
                  {
                  MySocket->Active = true;
                  Timer1->Enabled = false;
                  }

                  //—————————————————————————

                    Вверх
                  Dubinsky
                  Дата 1.11.2005, 15:50 (ссылка)
                  | (нет голосов)
                  Загрузка ... Загрузка …




                  Быстрая цитата

                  Цитата

                  Опытный
                  **

                  Профиль
                  Группа: Участник
                  Сообщений: 252
                  Регистрация: 1.6.2005

                  Репутация: нет
                  Всего: нет

                  ErrorCode как советует сам билдер надо не в НУЛЛ ставить а в 0 , ну и вообще надо смотреть что за код ошибки ! там не только отсутствие связи , но и ещё куча …на них то наверняка надо как то по другому реагировать …

                  PM MAIL WWW   Вверх



















                  Ответ в темуСоздание новой темы
                  Создание опроса
                  Правила форума «С++ Builder»
                  Rrader

                  Запрещается!

                  1. Публиковать ссылки на вскрытые компоненты

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

                  • Литературу по С++ Builder обсуждаем здесь
                  • Действия модераторов можно обсудить здесь
                  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
                  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) — крупнейший в рунете сборник материалов по Дельфи

                  • FAQ раздела лежит здесь!

                  Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

                   

                  0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
                  0 Пользователей:
                  « Предыдущая тема | C++ Builder | Следующая тема »

                  Понравилась статья? Поделить с друзьями:

                  Не пропустите эти материалы по теме:

                • Яндекс еда ошибка привязки карты
                • Async синтаксическая ошибка
                • Async await обработка ошибок
                • Asya12lkc коды ошибок
                • Asx ошибка abs

                • 0 0 голоса
                  Рейтинг статьи
                  Подписаться
                  Уведомить о
                  guest

                  0 комментариев
                  Старые
                  Новые Популярные
                  Межтекстовые Отзывы
                  Посмотреть все комментарии