为什么通过socket会丢数据?
libad 2003-07-18 11:09:51 从一个socket server的端口9990接收数据 ,数据量很大,我们客户端接收的数据老收不全,有丢报告的现象,但read和select函数都没有出错。不知什么原因?
尝试过把select的超时时间设大和不设超时,read 设成阻塞和非阻塞方式,但都不行,可如果手工telnet到9990端口上收报告,报告却不丢,不知什么原因?
如果不用read改用recv,应该怎么用呀?
代码如下:
while(1){
memset(buf,0x00,sizeof(buf));
FD_SET (sock,&readset);
//FD_ZERO (&readset);
select_time.tv_sec = 5;
select_time.tv_usec = 0;
rc_select = select (sock+1,&readset,NULL,NULL,&select_time);
if(rc_select == -1){/*select error*/
if(errno == EINTR) continue;
else{
log.write(LOG_DEV&LOGFILE_MASK|LOG_TIME|ERROR,
"%sselect socket reading status failed.\n",
ErrLogStr);
return -1;
}
}
else if(rc_select==0){/*timeout*/
break;
}
else if(rc_select > 0){
if(FD_ISSET(sock,&readset)){/*ready for reading*/
if((rc_read=read(sock,(void *)buf,sizeof(buf)))>0){
printf("\nget data here...\n");
}
else if(rc_read《=){}/* ISSET */
}
} //end while 1