C语言中alarm的应用
同事今天问我,如何在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的应用相关推荐
- sleep函数的作用c语言,C语言中的sleep函数是什么意思【详细介绍】
计算机知识:C语言中的Slee函数 Sleep函数简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned milliseconds); 在V ...
- c语言中的sleep(time),c语言中sleep的用法
c语言中sleep的用法的用法你知道吗?下面小编就跟你们详细介绍下c语言中sleep的用法的用法,希望对你们有用. c语言中sleep的用法的用法如下: C语言pause()函数:让进程暂停直到信号出 ...
- c语言中struct和c++中class实例对比
前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...
- 关于C语言中printf函数“输出歧视”的问题
目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...
- C语言中“野指针”、“悬空指针”是什么?
目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...
- c+语言+null,C/C++语言中NULL、'\0’和0的区别
NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...
- 关于C语言中的malloc和free函数的用法
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- python global函数_如何使用python语言中的global关键字获取函数值
在python语言中,如果在函数外层定义了一个全局变量a,函数内部又有一个同名的局部变量,想要这个全局变量的值改成为局部变量的值,可以使用global.下面利用一个实例说明如何实现这个场景,操作如下: ...
- c语言中的if语句_If ... C中的其他语句解释
c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...
最新文章
- VirtualBox6.0中CentOS7.6 网络配置
- dom4j ---最好的xml解决方案?
- Linux下cp命令 -f无效的解决方法
- 高并发编程-happens-before
- 【二分】买礼物的艰辛
- SQL基础语句(详解版)
- 亿万富翁夏令营:库克、巴菲特等出席太阳谷峰会
- 多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
- shell脚本--部署应用到tomcat并启动tomcat
- 03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符...
- 今天同学跟我说刚入门前端,想到我目前实习的公司涨涨经验
- myeclipse 扩展内存大小
- Android安卓小程序-随机数生成器
- Office2010的故事 1、从精简版无法升级
- 康佳电视维修记 LED55M5580AF
- 刷新bios后电脑死机了怎么办
- linux下大文件分割
- 不给别人添麻烦是一种教养还是性格缺陷?
- ubuntu18.04 网络配置 ipv4ipv6DNS路由
- Visual Studio(VS)的各个版本下载及安装