1、自带超时参数的函数
select自带超时
定义超时时间变量
struct timeval tv = {5, 0};
while(1) {
tv.tv_sec = 5;
tv.tv_usec = 0;
int res = select(1, &readfds, NULL, NULL, &tv);
.....
}
poll自带超时
1、poll函数的第三个参数,是以毫秒为单位的超时时间
2、当时间到达后,会接触阻塞,进而做相关事情
3、是一个整型变量,值传递
int res = poll(&pfd, 1, 5000);
2、setsockopt --- SO_RCVTIMEO
//设置接收超时时间
struct timeval tv = {5, 0};
if(setsockopt(sfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))==-1) {
perror("setsockopt error");
return -1;
}
3、alarm ---- SIGALRM
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
功能:设置一个定时器,在时间到达后,会发射一个SIGALRM的信号
参数:以秒为单位的时间, 如果参数设置成0,表示取消该定时器
返回值:如果该定时器之前没有定时器,则返回0,如果该定时器之前有定时器,会返回上一个定时器剩余的秒数,并更新上一个定时器为该定时器
关键词:alarm(5); SIGALRM
void handle(int signo) { if (signo == SIGALRM) { printf("alarm\n"); alarm(3); return; } } int main(int argc, char const *argv[]) { if (signal(SIGALRM, handle) == SIG_ERR) { printf("signal error\n"); return -1; } alarm(3); while (1) { } return 0; }