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可怕
  • 相关阅读:
    SSH-框架工作笔记
    Ajax基础
    Hibernate基础
    Struts1 中的国际化
    MyEclipse中的快捷键
    Oracle_存储过程
    oracle_开发子程序和包
    常用的正则表达式
    jQuery中的事件
    AcWing 1118. 分成互质组
  • 原文地址:https://www.cnblogs.com/Jacket-K/p/7992763.html
Copyright © 2011-2022 走看看