socket 接收线程实现(帖子)

我的服务程序在一个客户端接入以后就开一个接收线程,负责接收它的数据。  
  在此期间客户机保持和服务器的连接。  
   
  实际运行时,发现这个接收线程一运行,cpu利用率达到100%,根本接收不了其他的连接,请问大家怎么处理接收线程的?怎么改善接收线程的性能?  
   
   
  //     接收数据线程如下:  
  dword   winapi   recvthread(lpvoid   lparam)  
  {  
      int   socket;  
      socket=   (int   )lparam;  
      fd_set fdread;  
      struct   timeval   tmvtimeout={0l,100l};  
      char   recvbuf[256];  
     
      while   (true)  
      {  
          //   初始化  
          fd_zero(&fdread);  
          fd_set(socket,&fdread);  
          int ret   =   select(0,&fdread,null,null,&tmvtimeout);  
          if   (ret   ==   socket_error)  
          {  
                printf("select()   socket   error:   %d../n",getlasterror   ());  
                continue;  
          }  
          else   if   (ret   >   0)  
                {      
                      if   (fd_isset(socket,&fdread))  
                        {     //   有数据可读  
                                nrecv=   recv   (socket,   recvbuf,   sizeof(   recvbuf),   0);      
                                if   (nrecv   ==   socket_error)  
                                  {   //   读数据出错  
                                        printf("recv   socket   error:   %d../n",getlasterror());  
                                    }  
                                else    
                                  if   (nrecv   ==   0)  
                                  {   //   客户端断开连接  
                                              printf(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值