Привет Я пытаюсь написать свою собственную функцию отправки и возврата для моего приложения. Который должен обрабатывать 144 числа запросов в секунду в нагрузке. В режиме загрузки мое приложение одновременно сталкивалось с проблемой тайм-аута восстановления (5 запросов в 1 запросе Lakh). Здесь я установил 20 секунд для таймаута. PLS скажите мне, в чем проблема с моим кодом.Время ожидания приема с моим сокетом
recvAll функция:
int recvAll(int s, char *buf, int len, int timeout)
{
fd_set fds;
int n;
struct timeval tv;
FD_ZERO(&fds);
FD_SET(s, &fds);
tv.tv_sec = timeout;
tv.tv_usec = 0;
n = select(s+1, &fds, NULL, NULL, &tv);
if (n == 0) return -2;
if (n == -1) return -1;
int retVal =recv(s, buf, len, 0);
printf("received byes %d\n",retVal);
buf[retVal+1]='\0';
return retVal;
}
Вызов функции:
do
{
if(0 >= (bytesRcvd =recvAll(sockfd, recvBuffer,1024,20)))
{
perror("Receive Timeout Happened");
close(sockfd);
return -1;
}
totalBytesRcvd += bytesRcvd;
}while(totalBytesRcvd < 1024);
Добавить проверку ошибки для возвращаемых значений 'select' –