Привет, ЛОР.
Что-то не могу найти инфу по проверке TCP-соединения клиентом.
Смысл такой:
Клиент подключается к серверу и ждет от него инфу (ждет бесконечно и ничего без команды сервера не делает, главное для него - не пропустить сообщение от сервера)
В какой-то момент связь с сервером теряется/сервер зависает/сервер рвет соединение/меняются сетевые настройки или происходит еще что-то плохое.
Пока что в основной петле Epoll я проверяю приходящие данные на клиентском сокете:
while(1)
{
numOfNewEvents = epoll_wait(epollFD, epollEventArray, MAX_EPOLL_EVENTS, EPOLL_RUN_TIMEOUT);
for(i = 0; i < numOfNewEvents; i++)
{
eventSource = epollEventArray[i].data.fd;
...
// Что-то пришло на сокет(всегда ли, случись что, оно будет приходить?)
if(eventSource == clientSocket)
{
numOfReadBytes = recv(eventSource, dataBuffer, MAX_TCP_BUF_SIZE, 0);
if(numOfReadBytes > 0)
{
// Приехал пакет. Что-то делаем с ним
}
else
{
// Разрыв соединения. Пытаемся до посинения переподключиться, сообщаем юзеру и т.д.
}
}
...
}
}
Ну и собственно вопрос: для всех ли случаев подойдет такая обработка?
Некоторые из возможных вариантов развития событий(тут может быть куча вариантов):
- Сеть пропала, после восстановилась
- Сеть пропала, сервер вырубился, сеть восстановилась
- Сервер вырубился, потом включился
- Сеть пропала, сервер перезагрузился, сеть восстановилась
- Сеть пропала, сервер закрыл соединение, сеть восстановилась
- Админ сменил ориентацию и поменял нам IP