同事今天问我,如何在linux下的c代码里面控制connect的阻塞时间。应用的背景是:linux下的c程序有两个目标IP需要connect,如果用阻塞方式,当其中一个IP不能连接的情况下,程序将阻塞在connect函数上。
     本来以为用setsockopt修改个什么参数就可以搞定,结果baidu了半天也没有结果。倒是在网上搜到很多这样的解决方案:将connect方式设置为非阻塞方式,这样程序一旦执行就会马上返回,但问题是,到底有没有连接上呢,你需要等待一段时间,然后使用函数判断连接是否正常。试了下,貌似由于系统的区别,这个方法在我的linux环境下不适用,主要是后面判断是否连接上的函数不行,不管连接上或没连接上都返回一个值。
      看来网上的方法也不能尽信,最后在公司前人的一段代码里面找到了解决方法,这里分享下:

1.sigset(SIGALRM, u_alarm_handler);

2.alarm(2);

3.code = connect(socket_fd, (struct sockaddr*)&socket_st, sizeof(struct sockaddr_in));

4.alarm(0);

5.sigrelse(SIGALRM);
     首先定义一个中断信号处理函数u_alarm_handler,用于超时后的报警处理,然后定义一个2秒的定时器,执行connect,当系统connect成功,则系统正常执行下去;如果connect不成功阻塞在这里,则超过定义的2秒后,系统会产生一个信号,触发执行u_alarm_handler函数, 当执行完u_alarm_handler后,程序将继续从connect的下面一行执行下去。
     其中,处理函数可以如下定义,也可以加入更多的错误处理。

1.void u_alarm_handler()
2.{
3.}

C语言中alarm的应用相关推荐

  1. sleep函数的作用c语言,C语言中的sleep函数是什么意思【详细介绍】

    计算机知识:C语言中的Slee函数 Sleep函数简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned milliseconds); 在V ...

  2. c语言中的sleep(time),c语言中sleep的用法

    c语言中sleep的用法的用法你知道吗?下面小编就跟你们详细介绍下c语言中sleep的用法的用法,希望对你们有用. c语言中sleep的用法的用法如下: C语言pause()函数:让进程暂停直到信号出 ...

  3. c语言中struct和c++中class实例对比

    前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...

  4. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  5. C语言中“野指针”、“悬空指针”是什么?

    目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...

  6. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

  7. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  8. python global函数_如何使用python语言中的global关键字获取函数值

    在python语言中,如果在函数外层定义了一个全局变量a,函数内部又有一个同名的局部变量,想要这个全局变量的值改成为局部变量的值,可以使用global.下面利用一个实例说明如何实现这个场景,操作如下: ...

  9. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

最新文章

  1. VirtualBox6.0中CentOS7.6 网络配置
  2. dom4j ---最好的xml解决方案?
  3. Linux下cp命令 -f无效的解决方法
  4. 高并发编程-happens-before
  5. 【二分】买礼物的艰辛
  6. SQL基础语句(详解版)
  7. 亿万富翁夏令营:库克、巴菲特等出席太阳谷峰会
  8. 多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
  9. shell脚本--部署应用到tomcat并启动tomcat
  10. 03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符...
  11. 今天同学跟我说刚入门前端,想到我目前实习的公司涨涨经验
  12. myeclipse 扩展内存大小
  13. Android安卓小程序-随机数生成器
  14. Office2010的故事 1、从精简版无法升级
  15. 康佳电视维修记 LED55M5580AF
  16. 刷新bios后电脑死机了怎么办
  17. linux下大文件分割
  18. 不给别人添麻烦是一种教养还是性格缺陷?
  19. ubuntu18.04 网络配置 ipv4ipv6DNS路由
  20. Visual Studio(VS)的各个版本下载及安装

热门文章

  1. 微信小程序 报错一大串 define is not defined
  2. 软件开发项目管理工具哪个好?
  3. 信息系统面临的安全风险
  4. fastapi——快速入门
  5. 强化学习DRL--策略学习(Actor-Critic)
  6. getTime()获取时间戳方法与时区有关
  7. 注册苹果开发者帐号 用什么银行的什么卡好? 收款帐号呢?
  8. JAVA高级---(2)15分钟入门JVM底层原理
  9. mac下mysql修改密码
  10. fetch请求cookie设置