执行到调用select()函数时,程序就停在那儿了,不知道哪儿不对,大家帮忙看看!部分代码如下:
  new(readfds);  //创建一个可读的等待套接字描述符集合
  new(TimeInterval);
  TimeInterval.tv_sec := RESPONDTIME; //select超时时间,值为3秒
  TimeInterval.tv_usec := RESPONDTIME;
  FD_ZERO(readfds^);
  FD_SET(aSocket,readfds^);
  while TimeInterval.tv_sec>0 do
  begin
    lastTime := GetTickCount(); //纪录开始等待时间
    ret := select(aSocket+1,readfds,nil,nil,TimeInterval); //执行到这一句就停住了,死记!
    nowTime := GetTickCount();
    if FD_ISSET(aSocket,readfds^) then
    begin
      ret := recv(aSocket,recvBuffer,CONSTLEN+3*INTLEN,0);
      if ret=SOCKET_ERROR then
      begin
        result :=6;
        ShowMessage('注册客户端应用失败');
        break;
      end;
      if ret=0 then
      begin
        result := 7;
        ShowMessage('超时');
        break;
      end;
      nPos := 1;
      if PInteger(@recvBuffer[nPos])^ = PInteger(@sendBuffer[1])^ then //检查报文编号是否和发送的相等
      begin
        inc(nPos,3*INTLEN);
        if PInteger(@recvBuffer[nPos])^ = CC_REG then
        begin
          result := 0;
          _curAgentIP := AgentIP;
          break;
        end
        else
          continue;
      end
      else
      begin
        TimeInterval.tv_sec := TimeInterval.tv_sec - (nowTime-lastTime); //更改超时时间
        TimeInterval.tv_usec := TimeInterval.tv_sec - (nowTime-lastTime);
        continue;
      end;
    end;
  end;