Linux 中连接超时的另外一种实现
我之前的实现方式都是使用非阻塞的socket , 其实对于阻塞的socket 有另外一种实现方式,那就是使用 alarm(闹钟) , 进入连接前设置设置个超时
voidset_timeout(int n) { to = 0; alarm(n); signal(SIGALRM, timeout); }
然后进入连接,
y = connect(sock, (struct sockaddr *) &cli, sizeof(cli));
如果超时了,进程就会收到 SIGALRM 信号,程序的流程走到 SIGALRM 的信号处理函数 timeout 中
voidtimeout(int n) { to = 1; alarm(0); }
此时 connect 函数会被信号打断退出 此时判断下 to 变量 就知道是不是超时了
if (to) { printe("connect: Timed out\n"); continue; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。