• 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可怕
  • 相关阅读:
    IBinder介绍
    Android组成部分
    Android中handler,looper与messageQueue的代码解析
    JS
    设计模式
    冒泡排序
    战斗逻辑
    mongo数据库基础
    JS闭包
    c/c++
  • 原文地址:https://www.cnblogs.com/Jacket-K/p/7992763.html
Copyright © 2020-2023  润新知