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); //没用
};
++++++++++++++++++++++