select()函数使用的问题,大家帮忙看看!(50分)

  • 主题发起人 主题发起人 cowboy1999
  • 开始时间 开始时间
C

cowboy1999

Unregistered / Unconfirmed
GUEST, unregistred user!
执行到调用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;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
833
import
I
I
回复
0
查看
1K
import
I
后退
顶部