Chinaunix

标题: 请教select的使用问题 [打印本页]

作者: 龚申行    时间: 2007-09-20 18:19
标题: 请教select的使用问题
我在我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调用有限制啊?
作者: zxlzys    时间: 2007-09-20 19:07
errno 是多少?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2