Сервер постоянно отправляет данные клиенту с интервалом в 1 секунду - 2 минуты.Данные поступают, но через 15-20 минут клиент перестает получать сообщения.В этом случае rv равно 1 и n!= 0 и сервер отправляет данные (проверено).
while(1){
FD_ZERO(&set);
FD_SET(sockfd, &set);
timeout.tv_sec = 30;
timeout.tv_usec = 0;
rv = select(sockfd + 1, &set, NULL, NULL, &timeout);
std::cout << "rv Read: " << rv << std::endl;
if(rv == -1){
printf("ERROE select\n");
restartSocket();
}
else if(rv == 0){
printf("READ timeout\n");
}
else{
bzero(buffer,256);
printf("Start read\n");
int n;
n = read(sockfd,buffer,256);
if (n < 0){
printf("ERROR reading from socket");
restartSocket();
}
printf("read: %s\n",buffer);
}
}
Еще через 10-15 минут read () возвращает -1, а затем сервер снова подключается, и все начинает работать нормально в течение тех же 15-20 минути тогда все идет по кругу.
Как заставить клиента всегда получать данные с сервера?Или как заставить read () или select () понять, что все равно нет соединения с сервером и дал команду сбросить сокет?(Но я думаю, что повторное подключение каждые 5-10 минут как-то неправильно)