Вот мой код RasDial:
RASDIALPARAMS params={.dwSize=sizeof params,.szEntryName="VPN Connection"};
HRASCONN conn;
RasDialA(NULL,NULL,¶ms,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,¶ms,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,¶ms,&noCare);
в начале моей программы.
Функция dialup
вызывается из обработчика сообщений, отвечающего на сообщения из окна «Только мои сообщения».
В нулевом индексе указан localhost - поэтому я не набираю ни одного сервера.
ОК, я получаю ERROR_VPN_TIMEOUT как ошибку до этого. Может быть, это ключ.