zoukankan      html  css  js  c++  java
  • C connect实现Timeout效果(Linux)

    C connect函数是阻塞的,现要实现非阻塞式的connect。

    int SocketClient::connectTimeOut(const int &connect_fd, const int &timeout,const sockaddr_in &server)
    {
        int error=-1, len;
        len = sizeof(int);
        timeval tm;
        fd_set set;
        unsigned long ul = 1;
    
        ioctl(connect_fd, FIONBIO, &ul); //设置为非阻塞模式
    
    
        bool ret = false;
        if( connect(connect_fd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1)
        {
            tm.tv_sec = timeout;
            tm.tv_usec = 0;
            FD_ZERO(&set);
            FD_SET(connect_fd, &set);
            if( select(connect_fd+1, NULL, &set, NULL, &tm) > 0)
            {
    
                getsockopt(connect_fd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
    
                if(error == 0) ret = true;
                else ret = false;
            } else ret = false;
        }
        else ret = true;
        ul = 0;
    
    
      ioctl(connect_fd, FIONBIO, &ul); //设置为阻塞模式
    
        if(!ret){
            close(connect_fd);
    //        fprintf(stderr,"Connect server fail
    ");
        }
        return ret;
    }
    少壮不识cpp,老大方知cpp可怕
  • 相关阅读:
    JSON1
    program的发展史及两个方法
    统计字符出现的次数
    美国十大web2.0公司背后的故事
    web history-----JavaScript 的起源故事
    Baidu_Map
    My json(Demo)
    program发展史及 forecast
    js事件类型
    字符统计与正则表达式
  • 原文地址:https://www.cnblogs.com/Jacket-K/p/7992763.html
Copyright © 2011-2022 走看看