- 论坛徽章:
- 0
|
程序运行将近一天后,发现最后一段时间里客户端recv的时候总是select返回值为零,超时。而server端程序提示send成功。怎么回事呢?网络正常,因为还有一对类似的程序在运行。上次在论坛看到一位老兄碰到类似的问题,他的程序是运行了一个月,然后select出问题了,不知道怎么解决的?大家发表一下意见把.xiexie了
myselect()
{
static fd_set fdread;
static timeval tv;
CString t;
tv.tv_sec=1;
tv.tv_usec=0;
FD_ZERO(&fdread);
FD_SET(sock,&fdread);
if (mode==0)//检验是否可写
rselect=select(0,NULL,&fdread,NULL,&tv);
else //检验是否可读
rselect=select(0,&fdread,NULL,NULL,&tv);
if(rselect==-1)
{
t=message;
message.Format("select error=%d",WSAGetLastError());
t+=message;
diary(t);
return false;
}
if(FD_ISSET(sock,&fdread))
return true;
else //不在集合中,不可读或写
{
diary("select =0" ;
return false;
}
}
if(myselect(sock,1,"recv 字节数" )//看sock是否可读
{
memset(datanum,0,5);
rval=recv(sock,datanum,5,0);
} |
|