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. 深入浅出UML类图

    原作者:http://www.uml.org.cn/oobject/201211231.asp 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作&l ...

  2. Exception:A generic error occurred in GDI+

    分析: 一般出现这种问题都是GDI和原数据(比如Bitmap)是同一个实体,只不过是两个引用.换句话说就是这个路径的图片被GDI占用啦. 还有一种情况是路径有问题. 场景一: WPF的Image控件的 ...

  3. ARPSpoofing教程(二) - 获取网络设备中的详细地址信息

    WinPcap中文API  http://www.ferrisxu.com/WinPcap/html/index.html 1: #include"pcap.h" 2: #incl ...

  4. SQL总结二

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  5. 使用Keil uVision下载hex文件

    在uVision3/uVision4/uVision5中,可以创建一个项目用来下载HEX文件到flash里面. 具体步骤如下: 1.  在菜单中,选择 Project - New Project... ...

  6. uC/OS-II应用程序代码

    /*************************************************************************************************** ...

  7. css重点章节复习—布局-边框-边距-浮动 (部分)

    css重点章节复习—布局-边框-边距-浮动 在第二个任务中,这一块的后面那条线真的弄了很久.起初也是在html里面写的代码.之后觉得这样不好,想到第一个页面中用到的border-bottom和bord ...

  8. 按照网上方法js删除指定cookie,却怎么也删除不了,解决如下

    网上方法: 查找原因说是没有指定Path,记得系统里以前也没指定还是可以的,就查了一下现在的系统Path,猜测是系统Path由以前的/改为/E7-Planning 就改了前端删除方法 测试一下OK了, ...

  9. Behavior Trees

    https://en.wikipedia.org/wiki/Behavior_Trees_(artificial_intelligence,_robotics_and_control) http:// ...

  10. 常用的JS HTML DOM 事件

    HTML DOM 事件 HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). 提示: 在 ...