Socket connect error 10061

I have a client and server running on the same computer. Client connects to 127.0.0.1 with port 80. Server is listening on port 80 at the same time. When I start the client and try to connect it t...

On the client side:

  1. do not call WSACleanup() before calling connect().
  2. You are not doing any error handling on getaddrinfo().
  3. you are not setting the ai_flags to match your input values (like AI_NUMERICHOST).
  4. you are not freeing the memory that getaddrinfo() returns.
  5. you are not taking into account that you are specifying AF_UNSPEC to getaddrinfo() so it may return multiple addresses. You should try to connect to all of them until one succeeds.

Try this instead:

void Base::Connect(string ip, string port)
{
    int status, error;
    SOCKET ConnectSocket = INVALID_SOCKET;
    struct addrinfo hints = {0};
    struct addrinfo *servinfo;  // will point to the results

    hints.ai_family = AF_UNSPEC;     // don't care IPv4 or IPv6
    hints.ai_socktype = SOCK_STREAM; // TCP stream sockets
    hints.ai_flags = AI_NUMERICHOST; // parse an IP address
    //hints.ai_flags |= AI_NUMERICSERV; // parse a port number (not supported on Windows)

    // get ready to connect
    status = getaddrinfo(ip.c_str(), port.c_str(), &hints, &servinfo);
    if (status != 0)
    {
        printf("getaddrinfo error: (%d) %sn", status, gai_strerror(status));
        return;
    }

    addrinfo *addr = servinfo;
    do
    {
        // Socket Setup
        ConnectSocket = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
        if (ConnectSocket == INVALID_SOCKET)
        {
            printf("socket error: %dn", WSAGetLastError());
        }
        else
        {
            // Connect
            if (connect(ConnectSocket, addr->ai_addr, addr->ai_addrlen) != SOCKET_ERROR)
            {
                printf("connected to servern");
                break;
            }

            printf("connect error: %dn", WSAGetLastError());

            closesocket(ConnectSocket);
            ConnectSocket = INVALID_SOCKET;
        }

        addr = addr->ai_next;
    }
    while (addr != NULL);

    freeaddrinfo(servinfo);

    if (ConnectSocket == INVALID_SOCKET)
        printf("unable to connect to servern");
}

On the server side:

  1. you are not doing any error handling on socket(), bind() or listen().
  2. SO_REUSEADDR has to be enabled before calling bind(), not after. And you are not even enabling it correctly, either.
  3. you are not freeing the memory that getaddrinfo() returns.

Try this instead:

int _tmain(int argc, _TCHAR* argv[])
{
    // WINDOWS SETUP
    WSAData wsaData;
    if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) 
    {
        fprintf(stderr, "WSAStartup failed.n");
        exit(1);
    }

    // PREPARE TO LAUNCH
    int status;
    struct sockaddr_storage their_addr;
    socklen_t addr_size;
    SOCKET client;

    struct addrinfo hints = {0};
    struct addrinfo *servinfo;  // will point to the results

    hints.ai_family = AF_UNSPEC;     // don't care IPv4 or IPv6
    hints.ai_socktype = SOCK_STREAM; // TCP stream sockets
    hints.ai_flags = AI_PASSIVE;     // fill in my IP for me
    //hints.ai_flags |= AI_NUMERICSERV; // parse a port number (not supported on Windows)

    status = getaddrinfo(NULL, "80", &hints, &servinfo);
    if (status != 0) 
    {
        fprintf(stderr, "getaddrinfo error: (%d) %sn", status, gai_strerror(status));
        getchar();
        exit(1);
    }

    // optional, loop through servinfo creating a separate
    // listening socket for each address reported...

    // GET THE FILE DESCRIPTOR  
    SOCKET mSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol);
    if (mSocket == INVALID_SOCKET)
    {
        fprintf(stderr, "socket error: %dn", WSAGetLastError());
        freeaddrinfo(servinfo);
        closesocket(mSocket);
        getchar();
        exit(1);
    }

    // lose the pesky "Address already in use" error message
    BOOL yes = TRUE;
    if (setsockopt(mSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&yes, sizeof(yes)) == SOCKET_ERROR)
    {
        fprintf(stderr, "setsockopt error: %dn", WSAGetLastError());
        freeaddrinfo(servinfo);
        closesocket(mSocket);
        getchar();
        exit(1);
    }

    // WHAT PORT AM I ON
    if (bind(mSocket, servinfo->ai_addr, servinfo->ai_addrlen) == SOCKET_ERROR)
    {
        fprintf(stderr, "bind error: %dn", WSAGetLastError());
        freeaddrinfo(servinfo);
        closesocket(mSocket);
        getchar();
        exit(1);
    }

    freeaddrinfo(servinfo);

    int backlog = 2;
    if (listen(mSocket, backlog) == SOCKET_ERROR)
    {
        fprintf(stderr, "listen error: %dn", WSAGetLastError());
        closesocket(mSocket);
        getchar();
        exit(1);
    }

    // SERVER STARTED LISTENING SUCCESFULLY
    printf("Server is listening...n");

    // ACCEPT
    addr_size = sizeof their_addr;
    client = accept(mSocket, (struct sockaddr*)&their_addr, &addr_size);
    if (client == INVALID_SOCKET)
    {
        fprintf(stderr, "accept error: %dn", WSAGetLastError());
    }
    else
    {
        char ip[NI_MAXHOST] = {0};
        char port[NI_MAXSERV] = {0};

        status = getnameinfo((struct sockaddr*)&their_addr, addr_size, ip, NI_MAXHOST, port, NI_MAXSERV, NI_NUMERICHOST | NI_NUMERICSERV);
        if (status == 0)
            printf("Client connected from %s:%sn", ip, port);
        else
            printf("Client connected. getnameinfo error: (%d) %sn", status, gai_strerror(status));

        //...

        closesocket(client);
    }        

    closesocket(mSocket);
    printf("Server ended");

    getchar();

    return 0;
}

На чтение 7 мин. Просмотров 6.9k. Опубликовано 15.12.2019

Содержание

  1. Почему возникает такая проблема
  2. Как устраняется проблема
  3. Что вызывает ошибку «подключение не установлено, т.к. конечный компьютер отверг запрос на подключение»
  4. Скачок напряжения и потеря связи с серверами
  5. Проблема возникает в торренте
  6. Брандмауэр или антивирус не разрешают соединение
  7. Решение проблем с частной локальной сетью
  8. Другие причины появления ошибки
  9. Несколько вариантов поиска ошибок и решений:

Почему возникает такая проблема

Ошибка «Сервер 1С:Предприятия не обнаружен. Ошибка сетевого доступа к серверу.
(Windows Sockets — 10061 ( . ) Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
line = 567 file = .srcDataExchangeTcpClientlmpl.cpp) » возникает, когда служба «Агент сервера 1С:Предприятие» выключена (остановлена).

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

Как устраняется проблема

Запустить (стартовать) службу Агента сервера 1С:Предприятие.

После установки какого-либо софта, при входе в агент сервера 1С или запуске игры у любого пользователя может выскочить ошибка “Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение”. Эта проблема проявляется и при работе в какой-нибудь программе – она при этом попросту закроется, и вылезет окошко с вышеуказанным сообщением. Сегодня мы разберем существующие методы решения этой ошибки.

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

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

Скачок напряжения и потеря связи с серверами

Пользователи, особенно офисные работники, описывают такую ситуацию, когда скачок напряжения в сети вызывает потерю связи с серверами . Это может остановить работу всей компании. На компьютере (одном или нескольких) появляется сообщение о том, что к серверу 1С:Предприятие подключиться невозможно, т. к. конечный компьютер отверг запрос на подключение.

К счастью, справиться с этим довольно просто.

  1. Нажимаем ЛКМ на лупу в нижней панели монитора (рядом с кнопкой “Пуск”) и вводим слово “ Службы ”.
  2. Ищем в списке службу “ Агент сервера 1С:Предприятие ”.
  3. Запускаем ее через ПКМ .

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

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

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

Брандмауэр или антивирус не разрешают соединение

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

Отключить и один, и другой Это допустимо только в том случае, если мы уверены, что во время бездействия “защитников” не поймаем какой-нибудь вредоносный код
Добавьте проблемный порт в список исключений брандмауэра Он пропустит сетевой трафик по указанному порту, и работа будет налажена.

Одно из популярных мест, где возникает данная ошибка – софт 1С. Проблема в том, что агент сервера 1С и все процессы запущены, но тут появляется ошибка и сообщение о том, что “Подключение не установлено, т. к. конечный компьютер отверг запрос на подключение”. Решаем мы данную проблему тем, что добавляем порт 10061 в исключения брандмауэра и снова устанавливаем соединение с сервером.

Добавляем отмеченный порт 10061 в исключения брандмауэра

Важно: всегда используем только самую свежую версию 1С. Читаем о том, где получить обновления, в статье об ошибке под номером 0400300003.

Решение проблем с частной локальной сетью

Некоторые пользователи сообщают, что проблема также возникает после создания VPN-соединения в момент подключения к сети. Причем проявилось это после переустановки ОС с XP на более актуальную версию . Менялись настройки подключения, но результата это не давало – появлялось сообщение об ошибке соединения под номером 0x8007274D . Исправляется ошибка путем добавления ключей в реестр. Вводим в строку “ Выполнить ” команду regedit.exe .

Вызываем реестр через строку “Выполнить”

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

Редактируем записи реестра

Там же мы обязательно выставляем настройки брандмауэра (FirewallRules).

Другие причины появления ошибки

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

По крайней мере, пока мы не убедились, что проблема не с нашим устройством, а на сторонних ресурсах:

  1. Если не работает трекер , то для начала нужно подождать, возможно, ошибки на стороне разработчиков (сделали что-то не то или не подключили все составляющие сервера). Для уверенности стоит пообщаться с другими пользователями на каком-либо форуме и выяснить, у всех ли существует такая же проблема.
  2. Также у многих возникает вопрос, можно ли запускать на компьютере одновременно и сервер 1С, и клиент на Python . Ответ – можно, это никак не повлияет на возникновение ошибки.

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

Бывает, однажды, ни с того и с чего программа 1С нам выдает: Ошибка соединения с сервером 1С:Предприятие Не запущен ни один рабочий процесс. Соединение с базой невозможно.

Несколько вариантов поиска ошибок и решений:

1. Глюк сервака — всякое бывает

Остановите в диспетчере задач процессы: ragent rphost rmngr и Запустите службу «Агент сервера 1С:Предприятие»

2. При внезапном отключения питания или аналогичных ситуациях — повредился файл srvribrg.lst

Нужно удалить все из папки srvinfo

Для Windows зайдите в каталог c:program files1c1cv82 srvinfo, если Linux — то файлы лежат в домашнем каталоге пользователя от имени которого запускается сервис: usr1cv8/home/.1cv8/1C/1cv8 .

Запустите службу «Агент сервера 1С:Предприятие».

Через Администрирование серверов 1С Предприятия по новой создать кластер 1С и добавить информационные базы

3. Переименовали сервер на котором служба агента 1С

После переименования сервера Windows Server 2008 с установленным 1С:Предприятие 8.2, перестала работать служба «Агент сервера 1С:Предприятие 8.2». Она запускается, работает несколько секунд и останавливается. Если подключаться к серверу 1С:Предприятие 8.2 через консоль серверов, то возникает ошибка:

Ошибка соединения с сервером 1С:Предприятие 8.2 server_addr=tcp://SERVER:1540 descr=Ошибка сетевого доступа к серверу (Windows Sockets — 10061(0x0000274D). Подключение не установлено, т.к. конечный компьютер отверг запрос на соединение.) line=590 file=.SrcDataExchangeTcpClientItmpl.cpp

При подключении к базе на этом сервере имеем следующую ошибку:

Не запущен ни один рабочий процесс. Соединение с базой невозможно.

Данная проблема связана с тем, что настройки кластера серверов 1С:Предприятие хранятся в файлах в каталоге srvinfo (путь к нему указывает параметр -d в свойствах службы «Агент сервера 1С:Предприятие»). Поэтому после изменения имени компьютера надо выполнить дополнительно следующие действия:

Для Windows зайдите в каталог c:program files1c1cv82srvinfo, если Linux — то файлы лежат в домашнем каталоге пользователя от имени которого запускается сервис: usr1cv8/home/.1cv8/1C/1cv8 .

Отредактируйте в любом текстовом редакторе два файла: srvinfosrvribrg.lst и srvinfo
eg_15411CV8Reg.lst. Замените в этих файлах старое имя сервера на новое.

Запустите службу «Агент сервера 1С:Предприятие».

После выполнения указанных действий — Все будет


error 10061 откуда берется при connect

От:

maxidroms

Россия

 
Дата:  05.09.05 10:10
Оценка:

При коннекте на некоторых машина постоянно возникает 10061. В чем может быть причина?
Этот коннект хоть пробивается до серверного приложения или он не проходит сам компьютер даже, на котором это серв. приложение стоит?

Помогите плз!!! Клиенты недовольны. т.к. соединиться нельзя вообще никак! Это сообщения не переодически появляется а ПОСТОЯННО, но славо богу не у всех =(


Re: error 10061 откуда берется при connect

От:

TarasCo

 
Дата:  05.09.05 10:23
Оценка:

Здравствуйте, maxidroms, Вы писали:

M>При коннекте на некоторых машина постоянно возникает 10061. В чем может быть причина?

M>Этот коннект хоть пробивается до серверного приложения или он не проходит сам компьютер даже, на котором это серв. приложение стоит?

Где угодно
1)На локальной машине. Тогда «виноват» скорее всего персональный фаерволл
2)На шлюзе/прокси и.т.п. «Виноват» скорее всего межсетевой экран ( настоящий фаервол )
3)На серевре — скоре всего, опять же фаерволл.

В нормальной ситуации эта ошибка возникает, если на сервере не прослушивается запрашиваемый порт. В этом случае он отвечает RST+FIN что и означает активный отказ от соединения. Поскольку это происходит не со всеми клиентами, то стоит предположить, что порт указан верно, следовательно соединения отвергаются не сервером ( нужно проверить настройки клиентского ПО, если там задается порт ). Кроме серевра соединения могут отвергнуть фаерволл, прокси и.т.п. Если сервер расположен в инетнете, первым делом нужно проверить настройки прокси для выхода в интернет для этих пользователей.

Да пребудет с тобою сила


Re[2]: error 10061 откуда берется при connect

От:

maxidroms

Россия

 
Дата:  05.09.05 10:30
Оценка:

Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, maxidroms, Вы писали:


M>>При коннекте на некоторых машина постоянно возникает 10061. В чем может быть причина?

M>>Этот коннект хоть пробивается до серверного приложения или он не проходит сам компьютер даже, на котором это серв. приложение стоит?

TC>Где угодно

TC>1)На локальной машине. Тогда «виноват» скорее всего персональный фаерволл
TC>2)На шлюзе/прокси и.т.п. «Виноват» скорее всего межсетевой экран ( настоящий фаервол )
TC>3)На серевре — скоре всего, опять же фаерволл.

TC>В нормальной ситуации эта ошибка возникает, если на сервере не прослушивается запрашиваемый порт. В этом случае он отвечает RST+FIN что и означает активный отказ от соединения. Поскольку это происходит не со всеми клиентами, то стоит предположить, что порт указан верно, следовательно соединения отвергаются не сервером ( нужно проверить настройки клиентского ПО, если там задается порт ). Кроме серевра соединения могут отвергнуть фаерволл, прокси и.т.п. Если сервер расположен в инетнете, первым делом нужно проверить настройки прокси для выхода в интернет для этих пользователей.

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

Коннекты с разных городов. Это может значить то что у провайдера закрыт порт или еще что то? Иными словами дело в провайдере? Ведь при модемном соединении никаких предварительных настроек Рабочей группы и ай-пи адреса не делается?!


Re[3]: error 10061 откуда берется при connect

От:

TarasCo

 
Дата:  05.09.05 11:07
Оценка:

Здравствуйте, maxidroms, Вы писали:

M>Здравствуйте, TarasCo, Вы писали:


TC>>Здравствуйте, maxidroms, Вы писали:


M>>>При коннекте на некоторых машина постоянно возникает 10061. В чем может быть причина?

M>>>Этот коннект хоть пробивается до серверного приложения или он не проходит сам компьютер даже, на котором это серв. приложение стоит?

TC>>Где угодно

TC>>1)На локальной машине. Тогда «виноват» скорее всего персональный фаерволл
TC>>2)На шлюзе/прокси и.т.п. «Виноват» скорее всего межсетевой экран ( настоящий фаервол )
TC>>3)На серевре — скоре всего, опять же фаерволл.

TC>>В нормальной ситуации эта ошибка возникает, если на сервере не прослушивается запрашиваемый порт. В этом случае он отвечает RST+FIN что и означает активный отказ от соединения. Поскольку это происходит не со всеми клиентами, то стоит предположить, что порт указан верно, следовательно соединения отвергаются не сервером ( нужно проверить настройки клиентского ПО, если там задается порт ). Кроме серевра соединения могут отвергнуть фаерволл, прокси и.т.п. Если сервер расположен в инетнете, первым делом нужно проверить настройки прокси для выхода в интернет для этих пользователей.

M>А что может быть с настройками не то если:


M>Стоит обычная пользовательская машина, выход по модему через провайдера. Все после этого встречается мой сервак т .к. он висит на выделенном ай-пи. в интернете.

M>Коннекты с разных городов. Это может значить то что у провайдера закрыт порт или еще что то? Иными словами дело в провайдере? Ведь при модемном соединении никаких предварительных настроек Рабочей группы и ай-пи адреса не делается?!

1)
Возможны «происки» встроенных фаерволов. Например стандартному фаерволу из Win XP SP2 может не понравится идея соедиится с портом N на адрес M. IMHO любой персональный фаервол будет блокировать такие попытки.

2)Дело в провайдере?
про провайдеров не знаю, какая у них там политика безопасности? Но я бы на их месте тоже все подряд порты не открывал. В любом случае, можно обратиться в саппорт и поинтересоваться.

Да пребудет с тобою сила


Re[4]: error 10061 откуда берется при connect

От:

maxidroms

Россия

 
Дата:  05.09.05 11:09
Оценка:

Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, maxidroms, Вы писали:


M>>Здравствуйте, TarasCo, Вы писали:


TC>>>Здравствуйте, maxidroms, Вы писали:


M>>>>При коннекте на некоторых машина постоянно возникает 10061. В чем может быть причина?

M>>>>Этот коннект хоть пробивается до серверного приложения или он не проходит сам компьютер даже, на котором это серв. приложение стоит?

TC>>>Где угодно

TC>>>1)На локальной машине. Тогда «виноват» скорее всего персональный фаерволл
TC>>>2)На шлюзе/прокси и.т.п. «Виноват» скорее всего межсетевой экран ( настоящий фаервол )
TC>>>3)На серевре — скоре всего, опять же фаерволл.

TC>>>В нормальной ситуации эта ошибка возникает, если на сервере не прослушивается запрашиваемый порт. В этом случае он отвечает RST+FIN что и означает активный отказ от соединения. Поскольку это происходит не со всеми клиентами, то стоит предположить, что порт указан верно, следовательно соединения отвергаются не сервером ( нужно проверить настройки клиентского ПО, если там задается порт ). Кроме серевра соединения могут отвергнуть фаерволл, прокси и.т.п. Если сервер расположен в инетнете, первым делом нужно проверить настройки прокси для выхода в интернет для этих пользователей.

M>>А что может быть с настройками не то если:


M>>Стоит обычная пользовательская машина, выход по модему через провайдера. Все после этого встречается мой сервак т .к. он висит на выделенном ай-пи. в интернете.

M>>Коннекты с разных городов. Это может значить то что у провайдера закрыт порт или еще что то? Иными словами дело в провайдере? Ведь при модемном соединении никаких предварительных настроек Рабочей группы и ай-пи адреса не делается?!


TC>1)

TC>Возможны «происки» встроенных фаерволов. Например стандартному фаерволу из Win XP SP2 может не понравится идея соедиится с портом N на адрес M. IMHO любой персональный фаервол будет блокировать такие попытки.

TC>2)Дело в провайдере?

TC>про провайдеров не знаю, какая у них там политика безопасности? Но я бы на их месте тоже все подряд порты не открывал. В любом случае, можно обратиться в саппорт и поинтересоваться.

Ну хоть вы меня успокоили что это не в клиентской и не в серверной части дело…а то меня уже на куски тут готовы разорвать


Re[2]: error 10061 откуда берется при connect

От:

MaximE

Великобритания

 
Дата:  06.09.05 09:45
Оценка:

10 (1)

TarasCo wrote:

[]

> В нормальной ситуации эта ошибка возникает, если на сервере не прослушивается запрашиваемый порт. В этом случае он отвечает RST+FIN что и означает активный отказ от соединения.

В этом случае отсылается только RST.

[root@localhost max]# tcpdump -i lo tcp port 10000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
13:23:50.494285 IP localhost.localdomain.41915 > localhost.localdomain.10000: S 176260357:176260357(0) win 32767 <mss 16396,sackOK,timestamp 4126888 0,nop,wscale 2>
13:23:50.558286 IP localhost.localdomain.10000 > localhost.localdomain.41915: R 0:0(0) ack 176260358 win 0

2 packets captured
4 packets received by filter
0 packets dropped by kernel


Maxim Yegorushkin

Posted via RSDN NNTP Server 1.9


Re[3]: error 10061 откуда берется при connect

От:

TarasCo

 
Дата:  06.09.05 12:21
Оценка:

Здравствуйте, MaximE, Вы писали:

ME>В этом случае отсылается только RST.

Да, это меня переглючило, мысль ушла . RST+ACK S:0 A:xxxxxxx обычно отвечают
Спасибо за коррективу

Да пребудет с тобою сила


Re: error 10061 откуда берется при connect

От:

Michael Chelnokov

Украина

 
Дата:  10.09.05 11:46
Оценка:

Здравствуйте, maxidroms, Вы писали:

M>При коннекте на некоторых машина постоянно возникает 10061. В чем может быть причина?

Вы рано успокоились насчет серверной части
Почему-то никто не обратил внимания на то что ошибка 10061 — это WSAECONNREFUSED:
Connection refused.
No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host—that is, one with no server application running.

Возможные причины? Реализация сервера. Например он однопоточный, с последовательной обработкой запросов. И пока он обрабатывает один запрос, успевает поступить больше чем backlog (см. второй параметр функции listen) запросов. Все остальные получат WSAECONNREFUSED.
В более сложном случае при большой нагрузке может не успевать доходить ход до потока, делающего accept. С тем же результатом. Посмотрите

здесь

Автор: Michael Chelnokov
Дата: 09.11.01

и что мне тогда посоветовали.


Re[2]: error 10061 откуда берется при connect

От:

MaximE

Великобритания

 
Дата:  10.09.05 12:16
Оценка:

Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, maxidroms, Вы писали:


M>>При коннекте на некоторых машина постоянно возникает 10061. В чем может быть причина?


MC>Вы рано успокоились насчет серверной части

MC>Почему-то никто не обратил внимания на то что ошибка 10061 — это WSAECONNREFUSED:
MC>Connection refused.
MC>No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host—that is, one with no server application running.

MC>Возможные причины? Реализация сервера. Например он однопоточный, с последовательной обработкой запросов. И пока он обрабатывает один запрос, успевает поступить больше чем backlog (см. второй параметр функции listen) запросов. Все остальные получат WSAECONNREFUSED.

В этом случае клиенты получат WSAETIMEDOUT, а не WSAECONNREFUSED.

Когда очередь установленных соединений заполнена, новые клиенты не получают RST на свой SYN (что вызвало бы WSAECONNREFUSED). Новые клиенты не получают ничего на свой FIN, поэтому TCP стэк клиента будет еще несколько раз пытаться установить соединение посылая серверу SYN, пока не соединится успешно или не отвалится по таймауту с ошибкой WSAETIMEDOUT.


Re[3]: error 10061 откуда берется при connect

От:

Michael Chelnokov

Украина

 
Дата:  10.09.05 13:01
Оценка:

Здравствуйте, MaximE, Вы писали:

MC>>Возможные причины? Реализация сервера. Например он однопоточный, с последовательной обработкой запросов. И пока он обрабатывает один запрос, успевает поступить больше чем backlog (см. второй параметр функции listen) запросов. Все остальные получат WSAECONNREFUSED.


ME>В этом случае клиенты получат WSAETIMEDOUT, а не WSAECONNREFUSED.

Максим, я бы не писал если бы не знал. Если проверишь, то увидишь в этом случае именно WSAECONNREFUSED для тех клиентов что не поместились в очередь. WSAETIMEDOUT они получат если совсем ничего не будет в ответ. А в данном случае ответ четкий — сервер активно не захотел принимать входящее соединение.


Re[4]: error 10061 откуда берется при connect

От:

MaximE

Великобритания

 
Дата:  10.09.05 13:07
Оценка:

Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, MaximE, Вы писали:


MC>>>Возможные причины? Реализация сервера. Например он однопоточный, с последовательной обработкой запросов. И пока он обрабатывает один запрос, успевает поступить больше чем backlog (см. второй параметр функции listen) запросов. Все остальные получат WSAECONNREFUSED.


ME>>В этом случае клиенты получат WSAETIMEDOUT, а не WSAECONNREFUSED.


MC> … А в данном случае ответ четкий — сервер активно не захотел принимать входящее соединение.

И что в этом случае сервер отсылает клиенту?


Re[3]: error 10061 откуда берется при connect

От:

Michael Chelnokov

Украина

 
Дата:  10.09.05 13:10
Оценка:

1 (1)

Здравствуйте, MaximE, Вы писали:

ME>Когда очередь установленных соединений заполнена, новые клиенты не получают RST на свой SYN

Не факт. Судя по Стивенсу, POSIX разрешает как игнорировать SYN, так и отвечать на него RST.
В Windows — второй вариант. В BSD — первый.
Давайте будем отталкиваться от того факта что клиенты все же получают RST, т.к. ошибка именно ECONNREFUSED, а не ETIMEDOUT. Т.е. кто-то все же отсылает оный RST. Почему бы не предположить что этот кто-то и есть сервер? Сервер под Windows


Re[5]: error 10061 откуда берется при connect

От:

Michael Chelnokov

Украина

 
Дата:  10.09.05 13:11
Оценка:

Здравствуйте, MaximE, Вы писали:

MC>> … А в данном случае ответ четкий — сервер активно не захотел принимать входящее соединение.


ME>И что в этом случае сервер отсылает клиенту?

RST

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

A socket error 10061 is a connection that is refused or forcefully denied. While this error can technically be seen with any type of server connection, it is most often seen when a user attempts to connect to an email server. There are many reasons for a socket error 10061. A firewall could be blocking the connection, the service may be unavailable, the server program making the server work may be disabled or shut off, the servers may be overloaded, or the ports may be blocked. Each cause has a different fix that should allow the user to connect to the server.

The socket error 10061 code can appear whenever a user connects to a server. This is most often seen with email servers, because the most common server connection users encounter is one used with an email service. Computers that link to other servers, such as for business uses, may also see this problem. Regardless of how the error is caused, it still has the same common causes and fixes.

Man holding computer

Man holding computer

A firewall blocking the connection and causing a socket error 10061 is the easiest to fix. Firewalls keep malicious codes or connections from occurring, but a firewall sometimes gets confused and also blocks good connections. This most often happens if the user is connecting to a server for the first time or if the firewall was recently reset. In this instance, the user either has to list the server as friendly or shut down the firewall. If the firewall needs to be shut down, the user should put it back up after the server connection is finished.

Another cause for a socket error 10061 is a blocked port or ports. Ports need to be open for sockets to connect. Each server will require a different port, and each program will have a different way of opening ports. To fix this error, the user should contact the server’s customer service to see what ports are needed, and read the user manual or talk to customer service about how to open the specified port or ports.

The other causes, which cannot be controlled by the user, include a server being unavailable, the server program not running, and the server being overloaded. In these cases, the server must be repaired or turned on, or the user must wait until the busy surge has stopped and bandwidth has been freed up. In this instance, the user may wait from a few minutes to a few hours; in catastrophic instances days, may be needed to connect with the server.

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

Читайте также:

  • Socket error errno 10054
  • Socialclubhelper exe ошибка приложения
  • Socket error creating command port
  • Socket error connection timed out 110 connection timed out
  • Socket error code 111

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

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