首先,如果我的英语不完美,我道歉,但我应该能让你理解。 我正在开发一个TFTP服务器项目,它允许使用UDP协议下载和上传操作到客户端。 我在SELECT超时时遇到错误。 当在定义的超时传递之后,套接字上没有消息(对于请求),select函数应该返回0。我对吗? 相反,在我的代码中,即使存在当前操作(例如,我从服务器下载文件),超时“计时器”也始终处于活动状态,但是,选择功能在“超时”之前的所有时间都正确地返回“1” -expire”。
换句话说,我的程序在超时到期时正常工作;在这种情况下,操作(下载/上传)被中断。 我的目标是只有在没有请求操作或没有消息/包到达服务器时,超时才会起作用。
这是代码(特别是客户端要求从服务器下载)
FD_ZERO(&ready);
FD_SET(sockfd,&ready);
if((selRes = select(sockfd + 1,&ready,NULL,NULL,&tOutDat)) < 0){
printf("Errore select\n");
end = TRUE;
break;
} else if(selRes == 0){
printf("timeout expired\n");
end = TRUE;
break;
} else {
printf("selRes: %i\n",selRes);
if(firstTime == TRUE){
recvfrom(sockfd, rxBuff,sizeof(rxBuff), 0, (struct sockaddr *)&true_serv_addr, &servlen);
connect(sockfd, (struct sockaddr*) &true_serv_addr, servlen);
} else {
read(sockfd,rxBuff,sizeof(rxBuff));
}
}