Всем доброго вечера, например есть программа которая работает по сети через SOCK_STREAM сокет, но работает с сетью не постоянно, лишь изредка что-то шлёт, как ей узнать что упало соединение? Можно конечно при каждом вызове send/recv проверять выход на SOCKET_ERROR, но а если в тот момент программа ничего не посылает и в ближайшие минут пять ничего не будет посылать ? Я вот пользуюсь R&Q icq клиентом, тот сразу как падает соединение меняет статус на офлайн, а когда подымается - заново заходит в онлайн, как сие реализовать подскажите плиз.
Я сам не знаю, должна быть какаята айпишная функция которая сообщает о состоянии подключения, или какойто Listener, но я бы сделал и подругому. Попробуй просто каждые 5 секунд пинговать (или соединятся через http) известный сайт типа www.yahoo.com или www.google.com, таким образом в первые 5 секунд после разрыва связи твоя прога будет знать об этом (потому что не сможет соединится с сайтом). Я так и делаю для определения подключения на Java поскольку она не имеет пока встроенного метода проверки подключения к интернету. На безрыбии и рак рыба
да можно и пингом но много (относительно) траффика будет кушать этот метод + постоянные, лишние логи в сниффере, для меня это не выход наверняка должно быть лучшее решение
о! а если всё время в цикле выполнять recv? если ничего нового, то он вернёт ноль, а если упадёт соединение то он вернёт SOCKET_ERROR верно?
Не верно. Во-первых, на блокирующих сокетах (по умолчанию) прога "зависнет" на recv, то есть, будет ждать данных. Во-вторых, вернёт 0, если сервер закрыл соединение. А если какая-то ошибка (пинг таймаут, сбой), то тогда уже SOCKET_ERROR.