免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1606 | 回复: 1
打印 上一主题 下一主题

请教select的使用问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-20 18:19 |只看该作者 |倒序浏览
我在我socket的程序里使用select作为定时器,部分代码如下:
if(connect(m_fd_sock,
         reinterpret_cast<struct sockaddr *>(&server_addr_in),
               sizeof(sockaddr)) == -1)
    {
     if(errno == EINPROGRESS)
     {
      fd_set t_fdset;
      FD_ZERO(&t_fdset);
      FD_SET(m_fd_sock,&t_fdset);
      int nfds=m_fd_sock+1;
      struct timeval timeout=SOCK_TIMEOUT;
      int ret = select(nfds,NULL,(&t_fdset),NULL,&timeout);
      if(ret == 1)
      {
       if(!FD_ISSET(m_fd_sock,&t_fdset))
       {
        m_errstr = "ERROR(Connect): error happened when connect to server. ";
        m_errstr += "socket server ip is ";
        m_errstr += m_ipaddr;
        close(m_fd_sock);
        m_fd_sock = -1;
        return false;
       }
       int error=0, len=sizeof(int);
       getsockopt(m_fd_sock, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
       if(error != 0)
       {
        m_errstr = "ERROR(Connect): Exception happened when connect to server. ";
        m_errstr += "socket server ip is ";
        m_errstr += m_ipaddr;
        close(m_fd_sock);
        m_fd_sock = -1;
        return false;
       }
       return true;
      }
      else if(ret == 0)
      {
       m_errstr = "ERROR(Connect): Timeout when connect to server. ";
       m_errstr += "socket server ip is ";
       m_errstr += m_ipaddr;
       close(m_fd_sock);
       m_fd_sock = -1;
       return false;
      }
      else
      {
       m_errstr = "ERROR(Connect): Error happened when called select(). ";
       m_errstr += "socket server ip is ";
       m_errstr += m_ipaddr;
       close(m_fd_sock);
       m_fd_sock = -1;
       return false;
      }
      
     }
     else
     {
      close(m_fd_sock);
      m_fd_sock = -1;
      m_errstr = "ERROR(Connect): Failure when connect to server ";
      m_errstr += m_ipaddr;
      m_errstr += ", ";
      m_errstr += strerror(errno);
      return false;
     }
    }
    发现不停的有返回ERROR(Connect): Error happened when called select(). 的记录,甚至于程序coredump,想请教各位是我的程序写得有问题还是系统对select调用有限制啊?

论坛徽章:
0
2 [报告]
发表于 2007-09-20 19:07 |只看该作者
errno 是多少?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP