网络超时检测-alarm()函数

本文介绍了如何使用alarm()函数进行网络超时检测。该函数在达到设定时间时,会使最近的阻塞函数返回错误,通常返回值小于0。这个特性使得alarm()在特定场景下具有独特优势。

alarm()函数
1、在利用alarm()函数实现网络超时检测时,相比较于其他两种方式的特点是:
每调用alarm()函数一次,函数只会执行一次,并且只对最近的一个阻塞函数有效
2、电泳alarm()后,在到达设定的时间时,系统会认定alarm()最近的一个阻塞函数为错误,让其返回值小于0;


    当执行alarm()时间,在这期间还会执行下面的函数,直到到达时间后,会进行信号处理函数,之后会继续原来的函数往下执行,将其称之为自重启属性
    如果想要实现超时检测,需要跳过之后的函数往下执行。

    #include <signal.h>
    int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);
    功能:检测和改变一个信号的行为
    参数:
        signum:信号,除了不能改变的信号(SIGKILL, SIGSTOP)
        act:新的信号的属性
        oldact:老的信号的属性
    返回值:
        成功:0
        失败:-1
+++++++++++++++++++++++++++++
    struct sigaction {
         void     (*sa_handler)(int);    //信号处理函数
         void     (*sa_sigaction)(int, siginfo_t *, void *); //信号处理函数
         sigset_t   sa_mask;  //掩码(关于阻塞)
         int        sa_flags; //标志位(设置信号属性)
                    =====>
                        SA_RESTART 自重启属性

         void     (*sa_restorer)(void); //没用
     };
+++++++++++++++++++++++++++++++++++++++++++++++++++

 //每调用alarm函数只会执行一次,并且只会对最近的一个函数有效
 //位操作 读、改、写

 //读取原来信号的属性
 struct sigaction act;
 if(sig
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值