Почему я получаю ERROR_DIAL_ALREADY_IN_PROGRESS при синхронизации с вызовом RasDial? - PullRequest
0 голосов
/ 02 мая 2019

Вот мой код RasDial:

RASDIALPARAMS params={.dwSize=sizeof params,.szEntryName="VPN Connection"};
HRASCONN conn;
RasDialA(NULL,NULL,&params,0,NULL,&conn);

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

Почему происходит набор соединения, когда мой вызов синхронизирован (arg5 равен NULL), а мой код однопоточный.

Я посмотрел на панель соединений на панели задач, но мое VPN-соединение не подключено или не подключается.

Вот мой полный код для полноты:

RASDIALPARAMS params={.dwSize=sizeof params,.szEntryName="VPN Connection"};
DWORD dwPrevIndex;
dialup()
{
    extern const char *const servers[];
    int success;do
    {static HRASCONN conn;
    static DWORD serverIndex=1;
    RASCONNSTATUS status={.dwSize=sizeof status};
    strcpy(params.szPhoneNumber,servers[serverIndex]);

    {

        while(RasGetConnectStatusA(conn,&status)!=ERROR_INVALID_HANDLE)
                        RasHangUpA(conn),Sleep(500);}
    conn=NULL, success = serverIndex ? RasDialA(NULL,NULL,&params,0,NULL,&conn) : 0;
    printf("%s - %d\n",serverIndex[servers], success),
    dwPrevIndex=serverIndex,
    (serverIndex+1 == sizeof servers/sizeof(void *) ? serverIndex = 0 : ++serverIndex);}while(Sleep(500),success);
}

Я звоню

BOOL noCare;
RasGetEntryDialParamsA(NULL,&params,&noCare);

в начале моей программы.

Функция dialup вызывается из обработчика сообщений, отвечающего на сообщения из окна «Только мои сообщения».

В нулевом индексе указан localhost - поэтому я не набираю ни одного сервера.

ОК, я получаю ERROR_VPN_TIMEOUT как ошибку до этого. Может быть, это ключ.

...