tcp / ip время ожидания приема данных - PullRequest
0 голосов
/ 07 мая 2020

Я пишу приложение tcp / ip в c.

Мне нужно добавить таймаут приема данных 60se c,
Я пробовал setsocketopt () и функцию select ()

, но если я не отправляю данные из тайм-аута клиента не происходит на стороне сервера.

Вот мой код:

'' '

struct timeval timeout;
timeout.tv_sec =60;   /* 60 Secs Timeout */
timeout.tv_usec = 0;



if(setsockopt(hSocket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(timeout)) < 0)
{
    printf("Time Out\n");

   return -1;

}


//Receive data to the client
shortRetval=recv(hSocket, buffer,sizeof(buffer),0);
if(shortRetval<0)
{
    printf("failed to receive data\n");

    return -1;

}   

' ''

  1. Как я могу проверить работу функции тайм-аута или не.

Я пытался проверить таким образом,
Я подключаю клиента к серверу.
сервер ожидает получения данных от клиента, но клиент не отправляет данные в соответствии с моим кодом
поэтому тайм-аут должен происходить на стороне сервера, но это не

Та же проблема, с которой я сталкиваюсь при использовании функции выбора.

'' '

struct timeval timeout= {5,0}; 

fd_set in_set;

FD_ZERO(&in_set);
FD_SET(new_socket,&in_set);

int cnt=select(new_socket+1,&in_set,NULL,NULL,&timeout);
//if(cnt<0)
printf(" %d",cnt);
if(FD_ISSET(new_socket,&in_set)){
int cnyt=read(new_socket , &a , sizeof(a) );
printf(" %d---",cnyt);
if(cnyt<=0)
exit(0);
}else{
printf(" message gguh\n");}*/

' ''

Я сомневаюсь, что это из-за того, что клиент подключается к серверу, поэтому таймаута не происходит?

Пожалуйста, решите мою проблему,

Заранее спасибо

...