chuzhik
Пользователь
Сообщений: 74
|
|
« : 11 Апрель, 2011, 09:58:58 » |
|
Добрый день
Вот такая задача стоит. QNX 6.3.0 Рабочее место подключено по сети к другой аппаратуре, протокол TCP/IP, рабочее место - клиент. Нужно чтобы при выдергивании сетевого шнура между клиентом и сервером, программа клиента распознавала отсутствие связи. Под Linux это делалось установкой опций сокета
setsockopt(_socket->get_fd(),SOL_SOCKET, SO_KEEPALIVE, &time, sizeof (time)); setsockopt(_socket->get_fd(),SOL_TCP, TCP_KEEPCNT, &tries, sizeof(tries)); setsockopt(_socket->get_fd(),SOL_TCP, TCP_KEEPIDLE, &time, sizeof(time)); setsockopt(_socket->get_fd(),SOL_TCP, TCP_KEEPINTVL, &time, sizeof(time));"
Часть этих опций в хелпе по QNX я не нашел. Единственное, что раскопал - setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO, &time_val, sizeof(time_val) ); По этой опции на операции чтения recv клиент не задержится дольше заданного времени, а после выхода из recv количество считанных байтов будет равно -1, что соответствует ошибке со стороны сервера. Естественно, такой случай дальше обрабатывается.
Подскажите, пожалуйста, есть ли какие-то еще вариаты проверки наличия подключения? Старшие товарищи говорят, что выходить из чтения по таймауту не корректно.
|