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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2012, 01:02   #1
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию RASApi, при переподключении вылетает ошибка 651

Всем добрый вечер

Суть вопроса такова - используя RASAPI происходит автоматический реконнект к интернету.

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

Операционки - Windows 7 разных редакции, проявляется на всех

Ключевые моменты по коду:
Код:
procedure TReconnecter.Disconnect;
var
  conns: LPRasConn;
  ConnCount, bufsize: longint;
  i: integer;
  status: TRASCONNSTATUS;
begin
  bufsize := 0;

  RasEnumConnections(nil, bufsize, ConnCount);
  if ConnCount > 0 then begin
    GetMem(conns, bufsize);
    conns^.dwSize := sizeof(TRasConn);
    RasEnumConnections(conns, bufsize, ConnCount);
    status.dwSize := sizeof(TRasConnStatus);
    for i := 0 to ConnCount - 1 do begin
      if SameText(conns^.szEntryName,FEntryName) then begin
        RasGetConnectStatus(conns^.hrasconn, status);
        if status.rasconnstate=RASCS_Connected then
          HangUpAndWait(conns^.hrasconn);
      end;
      inc(conns);
    end;
    dec(conns, ConnCount);
    FreeMem(conns);
  end;
end;

procedure TReconnecter.HangUpAndWait(conn: integer);
var
  status: TRasConnStatus;
begin
  RasHangUp(conn);
  status.dwSize := sizeof(TRasConnStatus);
  repeat
    sleep(1000);
  until RasGetConnectStatus(conn, status) = ERROR_INVALID_HANDLE;
end;
Код:
procedure TReconnecter.Connect;
var
  par:TRasDialParamsA;
  rc:THRasconn;
  r:array[0..30] of TRasEntryName;
  RE: TRasEntry;
  DEV: array[1..100] of TRASDEVINFO;
  c,dsize,i, j,cnt: integer;
  pas:longbool;
  rs:integer;
  login,pass,entry:string;
  status:TRasConnStatus;
  stat:string;
begin
  fillchar(par, sizeof(TRasDialParams), 0);
  par.dwSize := sizeof(TRasDialParams);
  Entry:=FEntryName;
  StrPCopy(par.szEntryName, Entry);
  RasGetEntryDialParams(nil,par,pas);
  entry:=par.szEntryName;
  login:=par.szUserName;
  pass:=par.szPassword;
  fillchar(par, sizeof(TRasDialParams), 0);
  par.dwSize := sizeof(TRasDialParams);
  StrPCopy(par.szEntryName, Entry);
  StrPCopy(par.szUserName, Login);
  StrPCopy(par.szPassword, Pass);
  repeat
  rc:=0;
  rs:=RasDial(nil,nil,par,0,nil,rc);
  if rs=0 then begin
    repeat
      sleep(1000);
      status.dwSize:=SizeOf(TRasConnStatus);
      RasGetConnectStatus(rc, status);
    until (status.rasconnstate=RASCS_Connected) or (status.dwError<>0);
  end;
end;
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 21.09.2012, 10:06   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

В дополнение, пробовал подменять драйвер pppoe на вистовский (много где советуют поступить именно так) - перестает вообще работать подключение (что наверное неудивительно)
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение данных при переподключении базы Dozent БД в Delphi 13 21.04.2012 21:55
pascalABC.net. При нажатии на кнопку вылетает ошибка на readln barygan Паскаль, Turbo Pascal, PascalABC.NET 4 15.04.2011 22:00
При установке виндоус вылетает ошибка arturkhusnull Windows 3 28.02.2011 15:44
почему вылетает ошибка при передачи файлов через цокет leonw Работа с сетью в Delphi 6 19.01.2010 22:16
При запуске игры вылетает ошибка DarknEz Софт 28 14.12.2009 14:09