博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tcp中设置连接超时
阅读量:6379 次
发布时间:2019-06-23

本文共 1716 字,大约阅读时间需要 5 分钟。

直接上代码:

设置连接超时

//首先改成非阻塞套接字unsigned long ul=1;int rm=ioctl(sConnect,FIONBIO,(unsigned long*)&ul); if(rm==-1){  printf("ioctl noblock error!\n");  close(sConnect);   return -3; }//向服务器发出连接请求 int err = connect(sConnect, (struct sockaddr*)&addrServer, sizeof(addrServer));//正常返回EINPROGRESSif(err && errno!=EINPROGRESS) {  printf("cannot connect:%s\n",severAgent);  return -4;}//有可能返回0if (err==0){  printf("connect suceess!");}else{        struct timeval tv;         fd_set /*r,*/w;          //      FD_ZERO(&r);        FD_ZERO(&w);//      FD_SET(sConnect,&r);         FD_SET(sConnect,&w);         tv.tv_sec=m_conTimeout;            tv.tv_usec=0;        int retval = select(sConnect+1,0,&w,0,&tv);        if(retval==-1)        {            printf("select error\n");            return -5;        }        else if(retval == 0)        {            printf("connect timeout\n");            return -6;        }        else        {            int er;            socklen_t len = sizeof(er);            if (getsockopt(sConnect, SOL_SOCKET, SO_ERROR, (char *)&er, &len) < 0) {                //getsockopt()失败,进行错处理                printf("getsockopt error\n");                return -8;            }            if (er != 0) {                //connect()失败,进行错处理                printf("connect error\n");                return -9;            }        }} //改为阻塞ul=0;rm=ioctl(sConnect,FIONBIO,(unsigned long*)&ul); if(rm==-1){    printf("ioctl block error!\n");    close(sConnect);    return -7; }

 值得注意的是:linux中,如果服务器的地址无效,则以上超时过程正常。如果服务器地址有效,但是服务程序未开启,则直接返回错误,也就是说超时过程不起作用,说明是已经做了目标网络检测了。

       但是window中,同样是以上的代码,如果服务器的地址无效,则以上超时过程正常。如果服务器地址有效,但是服务程序未开,以上超时过程也是正常的。

       二者还是有点区别的。

 

转载于:https://www.cnblogs.com/bigfi/p/7389810.html

你可能感兴趣的文章
怎么提高自身技术
查看>>
北京游泳馆
查看>>
Mac 安卓模拟器打开 ONS
查看>>
完全卸载Oracle 11g教程
查看>>
Oracle调整表空间大小——ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据
查看>>
二叉树(一)
查看>>
函数的递归
查看>>
JavaScript之将JS代码放在什么位置最合适
查看>>
【“零起点”--百度地图手机SDK】如何使用离线地图?
查看>>
深拷贝与浅拷贝复习
查看>>
各种参数的响应时间
查看>>
SQL Server 索引重建脚本
查看>>
23:LVS客户端配置脚本案例
查看>>
Android播放本地视频
查看>>
80. Hibernate 5.0命名策略使用naming-strategy 不起作用【从零开始学Spring Boot】
查看>>
not found command:svn
查看>>
addEventListener和attachEvent小结
查看>>
IPHONE 开发 4 -- 深入理解iPhone OS/SDK与Objective-C 2.0
查看>>
在windows平台下获取精确经过时间
查看>>
SQL Server的还原(2)——STOPAT
查看>>