Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обрыв и восстановление сетевого соединения / 10 сообщений из 10, страница 1 из 1
12.01.2004, 16:06
    #32373382
k2
k2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
Допустим делаем запрос к базе данных через ADO

При нормальном соединении с базой данных он прекрасно работает

Далее вынимаем сетевой кабель из компа, пытаемся сделать запрос - естественно Winsock Error
Вставляем кабель обратно и сразу-же делаем запрос - результат тот же Winsock Error (хотя кабель уже подключен)

Если подождать некоторое время и сделать этот запрос еще раз, то он снова отрабатывет нормально

Т.е. понятно, что при подключении сети, состояние сокета меняется не сразу,
а через некоторое время (пусть даже и небольшое)

А вопрос в том, что можно ли как-то принудительно обновить состояние сокета, чтобы запрос к базе данных выполнялся сразу-же как только появляется сеть, а не через некоторое время ?

Заранее спасибо
...
Рейтинг: 0 / 0
13.01.2004, 12:03
    #32374109
Андрей GR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
А через какое время оно восстанавливается ?
После пробивки канала ?
...
Рейтинг: 0 / 0
13.01.2004, 12:44
    #32374220
k2
k2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
По разному, бывает и быстро в пределах 1 секунды,
бывает и около 10 секунд

Вообщем корелляцие примерно такие-же, когда вынимаешь сетевой кабель,
значок unplugged появляется тоже не сразу а через некоторое время (это время бывает короткое бывает и более длинное)

Хотя может эти времена от сетевой карточки зависят ?
...
Рейтинг: 0 / 0
13.01.2004, 13:41
    #32374338
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
авторДопустим делаем запрос к базе данных через ADO

Интересно! У меня при обломе сети и работе через один TADOConnection приходиться закрывать и снова открывать соединение. А у вас оно само восстанавливается. Вы не используете TADOConnection, а для каждого компонента ConnectionString? Ибо ADO не может само узнать, что связь на физическом уровне пропала.
...
Рейтинг: 0 / 0
13.01.2004, 13:57
    #32374377
k2
k2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
Все правильно ADOConnection и не знает что соединение востановилось или потерялось
При запросе ловится код ошибки ADO -2147467259 - он соответствует потери соединения и принудительно закрывается и открывается ADOConnection в этом случае
...
Рейтинг: 0 / 0
13.01.2004, 14:21
    #32374424
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
Тогда чего вы хотите?
...
Рейтинг: 0 / 0
13.01.2004, 15:30
    #32374607
k2
k2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
Так ведь-же не сразу соединение делается :(

Исходное состояние сетевой кабель разомкнут:

1.Вставляем кабель
2.Выполняем к примеру код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  fAdo:=TAdoConnection.Create(Self);
  fAdo.LoginPrompt:=False;
  fAdo.ConnectionString:=fstr;
  fAdo.ConnectionTimeout:= 15 ;

  try
   fAdo.Open;
  except
   on E:Exception do
    begin
     RaiseError('Ошибка соединения',E.Message)
    end;
  end; 
 


Результат Winsock Error

Второй вариант

Исходное состояние сетевой кабель разомкнут:

1.Вставляем кабель
2. Ждем время t=n (секунд)
3.Выполняем это же код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  fAdo:=TAdoConnection.Create(Self);
  fAdo.LoginPrompt:=False;
  fAdo.ConnectionString:=fstr;
  fAdo.ConnectionTimeout:= 15 ;

  try
   fAdo.Open;
  except
   on E:Exception do
    begin
     RaiseError('Ошибка соединения',E.Message)
    end;
  end; 
 


В результате нормальное соединение


Обычно n это от 1 до 20 секунд, чтобы успешно прошел Второй вариант

Мне надо чтобы n стремилась к нулю, чтобы соединение происходило сразу
как воткнули кабель
...
Рейтинг: 0 / 0
13.01.2004, 15:41
    #32374626
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
никак...
при отключении сети нт делает спулл затребованных коннекшенов затем просто реинициализация сокетов происходит... при этом обработка идет по принципу ведра с пустым дном - первый пришел - последний ушел - поэтому у такие интервалы во времени.
яб на твоем месте не парился - и перед запросами проверял подключение - а затем выполнял запрос. или в случае отключения - циклически просто долбился туда куда надо - тогда гарантированно твои запросы будут первыми в очереди.
...
Рейтинг: 0 / 0
14.01.2004, 12:52
    #32375565
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
по принципу ведра с пустым дном - первый пришел - последний ушелА интересная интерпретация стека и lifo)
...
Рейтинг: 0 / 0
14.01.2004, 12:59
    #32375575
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв и восстановление сетевого соединения
стек бывает в канализации
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обрыв и восстановление сетевого соединения / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]