今天没有系统学习什么新知识,就是把以前学到的知识复习了一下,其中有几点值得注意

connect(fd, (struct sockaddr *)addr, sizeof(struct sockaddr_in));

当fd处于非阻塞时, 如果connect没有成功连接,将返回-1,errno将指定于EINPROGRESS,意思是连接仍然在继续.

这个时候就可以用select来检测fd的状态了,一旦fd可写时,代表连接建立好,配合select实现了connect的连接超时设定的问题

select的返回值,

大于0,代表有n个监控的描述符"准备好",读写这些描述符均不会阻塞.

等于0,超时

小于0,发生错误,errno被指定

int write_timeout(int fd, unsigned int wait_seconds)
{
int ret = 0;
//初始条件检查
if (fd < 0 || wait_seconds <= 0)
{
ret = -1;
printf("func write_timeout()err:%d\n", ret);
return ret;
} fd_set rfds;
struct timeval tv; FD_ZERO(&rfds);
FD_SET(fd, &rfds); tv.tv_sec = 3;
tv_usec = 0; do
{
ret = select(fd + 1, NULL, &rfds, NULL, &tv);
}while(-1 == ret && errno == EINTR); //如果被信号打断,可以再次检测 if (0 == ret)
{
ret = -1;
errno = ETIMEDOUT;
}
else if (1 == ret)
ret = 0; return ret;
}

  

.

linux第8天 connect强化的更多相关文章

  1. Linux上 Can't connect to X11 window server using XX as the value of the DISPLAY 错误解决方法

    在Linux上运行需要图形界面的程序时出现如下错误提示: No protocol specified Exception in thread "main" java.awt.AWT ...

  2. 【linux】Can't connect to local MySQL server through socket和Plugin 'auth_socket' is not loaded报错

    真的是一次吐血的经历,弄了两个多小时才弄好. 问题1:直接登陆root用户报错 ERROR 2002 (HY000): Can't connect to local MySQL server thro ...

  3. Red Hat Enterprise Linux AS4, C++ OCCI connect Oracle 9i

    前提是已经安装好Oracle 9i. 1. 下载对应的ORACLE client安装. http://www.oracle.com/technetwork/database/features/inst ...

  4. Linux下connect超时处理

    1.前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口.当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口.我们知道端口属于网络的传输层, ...

  5. 【linux草鞋应用编程系列】_5_ Linux网络编程

    一.网络通信简介   第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章.   二.linux网络通信     在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...

  6. 抗衡Win Linux全凭这些桌面环境

    2012年01月25日 元老级桌面环境KDE     Linux操作系统最早使用在服务器上,而桌面操作系统并不是Linux的重点突围.但是,近几年Linux桌面操作系统有崛起的趋势,抢夺了部分桌面操作 ...

  7. linux ncat命令

    netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据.通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它.使用netcat命令所能完成的事情令人惊讶. netcat所做的 ...

  8. (转)非阻塞Connect对于select时应注意问题

    对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后 ...

  9. C Socket编程之Connect超时 (转)

    网络编程中socket的分量我想大家都很清楚了,socket也就是套接口,在套接口编程中,提到超时的概念,我们一下子就能想到3个:发送超时,接收超时,以及select超时(注:select函数并不是只 ...

随机推荐

  1. 取消svn关联

    把下面这段文字保存成一个reg文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\sh ...

  2. 删除下标为n的数组值

    Array.prototype.del=function(n) { //n表示第几项,从0开始算起.//prototype为对象原型,注意这里为对象增加自定义方法的方法. if(n<0) //如 ...

  3. [daily][CentOS][yum] 删除包的同时一同清理掉安装时一起装进来的依赖包

    说起来有点绕口,这个需求是这样的. 就是我yum装A包的时候,同时安装了A的依赖包a1,a2,a3. 当我们使用yum remove A卸载A包的是,a1,a2,a3包并不会一同被卸载掉.如果他们没有 ...

  4. javascript的alert()的消息框不弹出或者弹出信息有误

    有时不知道什么,有时javascript的alert()的消息框不弹出或者弹出信息有误,代码是这么写的: //提示信息 public static void alert(TemplateControl ...

  5. 一本很不错的书----DOOM启示录

    强推,所有玩游戏的和做游戏的热爱游戏的都应该看看. 摘录了一些话. 盖茨不明白,为什么啊为什么,为什么一个麦斯奎特的小公司,居然能从他手下挖走迈克尔·亚伯拉什,而且仅仅凭借几个游戏就胜过了自己的软件帝 ...

  6. [LeetCode] Jump Game II(贪婪算法)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. 关于使用UDP(TCP)跨局域网,NAT穿透的心得

    前言:        最近我用java做了一个C/S的类似QQ之类的IM系统(即时通讯系统),遇到了不能跨局域网通讯的问题,经过在网上,和书上查阅了一些资料,了解了一些情况,现在就总结一下我的解决方案 ...

  8. linux boot logo rotate

    开机logo旋转方法. 参考链接 https://www.kernel.org/doc/Documentation/fb/fbcon.txt https://community.nxp.com/thr ...

  9. iOS 并发编程之 Operation Queues

    现如今移动设备也早已经进入了多核心 CPU 时代,并且随着时间的推移,CPU 的核心数只会增加不会减少.而作为软件开发者,我们需要做的就是尽可能地提高应用的并发性,来充分利用这些多核心 CPU 的性能 ...

  10. Shell函数语法

    Shell函数语法 定义函数: function   函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名  参数一   参数二 return在函数里面使用会跳出函数并 ...