为什么通过socket会丢数据?

libad libad 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
从一个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
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
libad
Linux/Unix社区 23,224 成员 74,535 内容