- 论坛徽章:
- 0
|
为什么select的超时不准确?
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf("Socket Error: Create Socket failed\n" ;
return ;
}
memset(&addr,0,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr=inet_addr(IP);
memset(&addr.sin_zero,0, ;
memset(&Req,0,sizeof(Req));
if (connect(sockfd, (struct sockaddr *)&addr,sizeof(struct sockaddr)) == -1)
{
printf("Can not Connect to %s:%d\n",IP,PORT);
return ;
}
FD_ZERO(&read_fds);
FD_SET(sockfd, &read_fds);
fdmax = sockfd;
tval.tv_sec=5;
tval.tv_usec=0;
......
send(sockfd,(char *)&Req,sizeof(RequestStruct<T> ,0);
if (select(fdmax+1, &read_fds, NULL, NULL, &tval)==0) //超时
{
puts ("time out " ;
}
else
{
if ((nbytes=recv(sockfd, (char *)&Rsp, sizeof(ResponseStruct<T> , 0)) <= 0)
{
return -3;
}
else
{
return 1;
}
} |
|