SOCKET cClient;
    cClient=socket(AF_INET,SOCK_STREAM,0);
    //设置为非阻塞套接字
    int iMode = 1;
    ioctlsocket(cClient, FIONBIO, (u_long FAR*)&iMode);
    //定义服务端
    SOCKADDR_IN saddr;
    saddr.sin_addr.S_un.S_addr=inet_addr(CMT->iplist[i]);
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(5001);
    //超时时间
    struct timeval tm;
    tm.tv_sec  = 3;  //3秒
    tm.tv_usec = 0;
    int ret = -1;
    //非阻塞操作
    // 尝试去连接服务端
    if (!connect(cClient, (SOCKADDR*)&saddr, sizeof(saddr)))
    {
     ret = 1; // 连接成功
    }
    else
    {
     fd_set set;
     FD_ZERO(&set);
     FD_SET(cClient, &set);
     if (select(-1, NULL, &set, NULL, &tm) <= 0)
     {
      ret = -1; // 有错误(select错误或者超时)
      //continue;//循环发送SOCKET时continue
     }
     else
     {
      int error = -1;
      int optLen = sizeof(int);
      getsockopt(cClient, SOL_SOCKET, SO_ERROR, (char*)&error, &optLen);
      if (0 != error)
      {
       ret = -1; // 有错误
       //continue;//循环发送SOCKET时continue
      }
      else
      {
       ret = 1;  // 无错误
      }
     }
    }
    // 设回为阻塞socket
    //iMode = 0;
    //ioctlsocket(cClient, FIONBIO, (u_long FAR*)&iMode); //设置为阻塞模式
    if (ret==1)
    {
     send(cClient,buffer,1024,0);
     recv(cClient,buffer,1024,0);
     closesocket(cClient);
    }
    closesocket(cClient);

非阻塞SOCKET套接字connect等待时间的实现的更多相关文章

  1. 设置非阻塞的套接字Socket

    当使用socket()函数和WSASocket()函数创建套接字时,默认都是阻塞的.在创建套接字之后,通过调用ioctlsocket()函数,将该套接字设置为非阻塞模式.函数的第一个参数是套接字,第二 ...

  2. 斐讯面试记录—阻塞Socket和非阻塞Socket

    文章出自:http://blog.csdn.net/VCSockets/ 1.TCP中的阻塞Socket和非阻塞Socket 阻塞与非阻塞是对一个文件描述符指定的文件或设备的两种工作方式. 阻塞的意思 ...

  3. 网络编程初识和socket套接字

    网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ...

  4. python socket 套接字编程 单进程服务器 实现多客户端访问

    服务器: import socket #单进程服务器 实现多客户端访问 IO复用 #吧所有的客户端套接字 放在一个列表里面,一次又一次的便利过滤 server = socket.socket(sock ...

  5. Python之异常处理和socket套接字连接7

    一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...

  6. 19 网络编程--Socket 套接字方法

    1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...

  7. 网络编程基础之Socket套接字

    一.Socket介绍 1.什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族 ...

  8. Python开发基础-Day23try异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

  9. python基础之try异常处理、socket套接字基础part1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

随机推荐

  1. JAva使用DOM读取XML数据(解析)

    原来一切都是有套路的 使用DOM解析XML文档步骤 1.创建解析器工厂对象 DocumentBuildFactory对象 2.由解析器工厂对象创建解析器对象,即DocumentBuilder对象 3. ...

  2. JQuery------判断拥有某个class或id的div是否存在

    if ($(".Btn,#Show").length > 0) { alert("存在"); } else { alert("不存在" ...

  3. Linq------各种查询语句大全

    查询Title列的第一个值 string str = db.Webs.Select(p => p.Title).FirstOrDefault(); 根据ID,查询Title列的第一个值 b.We ...

  4. TP中验证码的实现

  5. VS2012 error C2664: “std::make_pair”:无法将左值绑定到右值引用

    在vs2012(c++)make_pair()改动: C++: template <class T1, class T2> pair<V1, V2> make_pair(T1& ...

  6. parted命令详解

    parted命令详解   用法:parted [选项]... [设备 [命令 [参数]...]...]   将带有“参数”的命令应用于“设备”.如果没有给出“命令”,则以交互模式运行.   帮助选项: ...

  7. Spring MVC学习笔记——Controller接口

  8. Struct Member Default Value

    在C#中struct是值类型的数据类型,其默认值相当于调用了无参数默认构造函数之后的值.这也许就是struct不允许重载无参数默认构造函数的原因. https://msdn.microsoft.com ...

  9. GMU 简单使用一

    <!doctype html> <html> <head> <title>iOS7风格的进度条</title> <meta chars ...

  10. 二叉排序树(Binary Sort Tree)

    参考文章:http://blog.csdn.net/ns_code/article/details/19823463 不过博主的使用第一种方法操作后的树已经不是二叉排序树了,值得深思!! #inclu ...