C函数select()中的奇怪超时

时间:2012-12-13 15:17:35

标签: c ftp timeout tftp

首先,如果我的英语不完美,我道歉,但我应该能让你理解。 我正在开发一个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));
    }
}

0 个答案:

没有答案