- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2011-01-20 13:40 编辑
应该是正常的错误,发送缓冲满
hellioncu 发表于 2011-01-19 13:51 ![]()
是接收时发生的错误。 现在1000个客户,流量不大时也时有发生。
有时在客户端发生,有时在服务器发生。
接收器代码(多线程环境,线程间不共享socket):
- int RecvNet(int s,char *buf,int n,int timeout)
- {
- int bcount,br,ret,num=0;
- struct timeval tmout;
- tmout.tv_sec=timeout;
- tmout.tv_usec=0;
- ret=setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char *)&tmout,sizeof(tmout));
- if(!buf) return 0;
- *buf=0;
- if(n<=0) return 0;
- bcount=0;
- br=0;
- num=0;
- while(bcount<n){
- if((br=read(s,buf,n-bcount))>0){
- bcount+=br;
- buf+=br;
- continue;
- }
- if(br<0){
- //在这里出错返回
- ShowLog(1,"%s:br=%d,err=%d,%s",__FUNCTION__,br,errno,strerror(errno));
- return -1;
- }
- if(!br ) {
- if( ++num>100) break;
- usleep(5000);
- continue;
- } else num=0;
- }
- if(bcount<=0) {
- ShowLog(1,"%s:bcount=%d,err=%d,%s",__FUNCTION__,bcount,errno,strerror(errno));
- return -1;
- }
- return bcount;
- }
复制代码 |
|