Cobalt747
Дата: 08.07.2019 22:50:57
Есть TCP-сервер
Клиент подключается и ждет команд от него.
иногда команды могут приходить очень редко.
Соответственно, при дисконнекте, когда связь рвется физически, никакого отличия от ошибки по таймауту я не наблюдаю.
И в списке портов это соединение также висит в статусе "Established"
Что посоветуете?
Gator
Дата: 09.07.2019 01:41:43
А может и таймаутом поиграть. Пинг-то он всеяден пр портам...
А дисконнект это что? Пьяный тракторист кабло распахал? Лавина/наводнение/миру кирдых?
При отдыхе, сервак по идее должен команду разослать типа BYE, "ушла на базу", "спать ложусь до NN:mm" ...
А кто прочухал, тот сам себе злобный клиентурко
black-manatee
Дата: 09.07.2019 07:49:13
Cobalt747 |
---|
Есть TCP-сервер Клиент подключается и ждет команд от него. |
Что-то тут не так. Обычно клиент посылает команды серверу.
Речь идет про Indy ? Клиент устанавливает соединение с сервером и висит, ждет команды ?
Лучше, если клиент будет раз в X секунд открывать соединение с сервером, спрашивать: "Есть чо ?" и закрывать сразу соединение.
Дегтярев Евгений
Дата: 09.07.2019 07:56:45
Cobalt747,
Dimitry Sibiryakov дело говорит
гарантированный способ определить жив коннект или нет - записать что-то в сокет
если клиент не проявляет активности, ее нужно эмулировать - вводить в протокол сообщения ping и pong
клиент с интервалом, который на 10-20% меньше таймаута чтения, шлет пинг (если здесь ошибка коннект точно сдох), сервер должен ответить pong, если все ок, то клиент примет это сообщение и не будет таймаута по чтению, если же таймаут превышен - либо проблемы с коннектом либо с сервером