На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Winsock error: code 10053 (WSAECONNABORTED) , Ошибка при вызове функции recv - WSAECONNABORTED
      Всем добрый день!
      Уже много дней бьюсь со следующей проблемой.
      Имеется tcp-клиент (С++, winsock). Он работает следующим образом:
      1. connect
      2. send - посылает немного (10-12 байт) данных
      3. shutdown(SD_SEND)
      4. while(recv() > 0)

      Подключаюсь к www.yandex.ru, передаю (в send) HTTP-запрос, он возвращает ответ. Все корректно.
      Стоит локальный Apache. Подключаюсь к нему через интерфейс сетевой карточки - 192.168.0.100 - ОК.
      Но вот стоит мне попробовать подключиться через loopback (127.X.X.X) - в 50% случает recv падает с ошибкой 10053.
      Причем:
      - в этом случае (в случае ошибки) recv возвращается мгновенно (по крайней мере зрительно задержки никакой нет).
      - если убрать вызов shutdown, то все работает корректно.

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

      Подозрение падает на loopback-петлю (и тогда это не имеет отношения к ветке форума), но я не знаю, как выяснить истинную причину падений, и заранее приношу извинения, если моя тема не попадает в рамки "С/С++ - сетевое программирование".

      Стоит Windows 7 Professional 32bit, Comodo firewall, Avira antivirus. Подозреваю, что фаейрвол и антивирус не виноваты: ни безопасный режим, ни их отключение проблем не решает. Сброс настроек TCP/IP тоже проблем не решает (netsh int ip reset).

      Эта же программа тестировалась на 3 реальных компьютерах с XP и Vista. Проблем не возникает. Работает исправно и на виртуальной машине с точно такой же Windows 7, как и на моем компьютере. Работает под Linux (там, конечно, используется не WinSock).

      3 дня изучаю различные ресурсы интернета, видел еще 2-3 описания такой же ситуации на различных форумах, однако решения проблемы нигде не нашел. Переустановка Windows на основном компьютере, к сожалению, невозможна.
      Подскажите, пожалуйста, как можно выяснить причину возникновения 10053 ошибки?
      Заранее спасибо за любую помощь!
      Сообщение отредактировано: jenia90 -
        Причин может быть много
        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).
        WinSock functions: recv(), recvfrom(), sendto(), FD_CLOSE

        Многие форумы говорят - что это обычно ошибка в коде
        Посмотрите вот здесь

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

          В самом деле, помогла вставка задержки в 1мс между send и shutdown.

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


          Рейтинг@Mail.ru
          [ Script execution time: 0,0191 ]   [ 16 queries used ]   [ Generated: 30.06.25, 16:24 GMT ]