-
> Но мне кажется было бы правильно, если сам запрос просто
> выдавал бы исключение в случае потери связи и все.
А откуда он узнает, что произошёл именно обрыв связи?
Реальный пример из реальной жизни: система проработала 5 лет в режиме 24х7, потребовалось "ужать" устаревшие данные. Скрипт работал примерно 4 часа. Результат выполнения - select result = @result;
-
> А откуда он узнает, что произошёл именно обрыв связи?
сетевое соединение обычно знает, что оно разорвано... если коннект установлен/устанавливается через сеть, то почему бы ему не знать? ... не UDP же они используют.
-
> сетевое соединение обычно знает, что оно разорвано...
Это если оно штатно разорвано. А если нет, то зависит от реализации: шлётся там внутри handshake или нет.
Я пока ни одного коннекшена не знаю, у которого бы было такое событие.
-
> сетевое соединение обычно знает, что оно разорвано
где, как? имхо узнаем, по таймауту только...
-
хотя по модели osi, сетевая может сказать, что коннекшин лост, но это под вопросом...
-
> Это если оно штатно разорвано.
а если оно держится внутри драйвера то как ADO в синхронном режиме поймет это, не получив управления?
> но это под вопросом...
для informix-а и mssql вопроса нет... а вот для mysql почему то есть... и вывод? сокет не знает, что его "разорвали"? чушь.
-
разорвали или помехи на канале, как определить? таймаут!
-
> сокет не знает, что его "разорвали"?
Я на минуточку не понял: а что, сокет сам регулярный пинг делает?
-
если тип не дейтаграмы (UDP) то да
-
О как... А я был уверен, что это дело самому надо реализовывать.
-
> то да
а можно подробнее, я чет тож в первый раз слышу об этом
-
-
вот не вижу там реализацию ping в tcp протоколе! то, что ответом от клиента приходит подтверждение, так это понятно...
-
не знаю чего ты там не видишь, а пинг это всего лишь "прозвон" коннекта/соединения... (подтверждение друг для друга)
то ты в него "не веришь", а то тебе это понятно, а ping очевидно должен означать утилиту для юзера.
-
> подтверждение друг для друга
теперь ВАЖНЫЙ момент: в простое... а не во время передачи данных!
-
не буду спорить, проще согласиться... да, "брат" лучше знает, а ТУПЫЕ разработчики низкоуровневых протоколов писавшие TCP именно так и делают, и в процессе передачи данных совсем не обращают внимания на то что данные не передаются... и ждут 18мин.
плевать на на мои проверки у информикса/mssql, определивших разрыв в долю секунды, у них наверно случайно получилось 100500 раз подряд. случайно.
-
-
> вот такую ссылку:
по ней все с точностью до наоборот, в простое посылка проверочных пакетов не обязательна (даже по умолчанию отсутствует), но вот как только начнут передавать данные никакого таймаута не нужно чтобы определить разрыв... что собственно и происходит. по моим наблюдениям.
p.s. в ADO тоже есть свойство "keep alive" но оно значит несколько иное - будет ли закрываться коннект при закрытии последнего открытого датасета, с последующим открытием первого открытого, или нет. а не собственно проверку коннекта.
-
> и в процессе передачи данных совсем не обращают внимания
> на то что данные не передаются... и ждут 18мин.
где я об этом говорил???
-
[35] ты бредишь или как?
Я тебе говорю одно, ты уперся на другом, не вникая в мои слова...