Я пишу приложение 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;
}
' ''
- Как я могу проверить работу функции тайм-аута или не.
Я пытался проверить таким образом,
Я подключаю клиента к серверу.
сервер ожидает получения данных от клиента, но клиент не отправляет данные в соответствии с моим кодом
поэтому тайм-аут должен происходить на стороне сервера, но это не
Та же проблема, с которой я сталкиваюсь при использовании функции выбора.
'' '
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");}*/
' ''
Я сомневаюсь, что это из-за того, что клиент подключается к серверу, поэтому таймаута не происходит?
Пожалуйста, решите мою проблему,
Заранее спасибо