没有考虑到read的返回值:P
/*
brief: 超时读数据
fd: 文件描述述
lpdata: 数据指针
timeout: 超时值(秒)
len: 读数据长度
return:实际读数据长度
*/
int ReadData(int fd,char *lp_out_data,int timeout,int len)
{
fd_set rxset;
int z;
int nfds;
int sumlen =0;
struct timeval tv;
char lpdata[RECV_MAX_DATA];
do
{
FD_ZERO(&rxset);
if(fd>=0)
FD_SET(fd,&rxset);
nfds = fd+1;
tv.tv_sec=timeout;
tv.tv_usec = 0;
do
{
z = select(nfds,&rxset,0,0,&tv);
}while(z==-1&&errno==EINTR);
if(z == -1)
printf("select(2)\n");
if(z == 0)
{
printf("timeout\n");
fd = -1;
}
if(fd>=0&&FD_ISSET(fd,&rxset))
{
memset(lpdata,0,sizeof(lpdata));
if (len > RECV_MAX_DATA)
len = RECV_MAX_DATA;
z = read(fd,lpdata,len);
if(z == -1)
{
printf("read(2) of fd\n");
fd = -1;
}
if(z >0)
{
sumlen = sumlen+z;
lpdata[z]=0;
strcat(lp_out_data,lpdata);
// printf("read %d bytes <<%02x>> from fd;\n",z,lpdata[0]);
}
else
{
printf("read EOF from fd;");
fd = -1;
}
}
}while (fd>=0);
return sumlen;
}
posted on 2005-02-22 14:08 自由空间 阅读(4446)
评论(6) 编辑 收藏