我已经完成了与计时器相关的不同问题。它接缝我的代码应该可以工作。但是当在套接字上接收数据时发生超时时它不起作用。我做了一个名为 timeout_timer 的函数,函数的定义如下:
timeout_timer(long seconds, long micro_seconds)
{
struct itimerval *alarm_set;
if (micro_seconds >= MILLION) {
seconds = seconds + micro_seconds / MILLION;
micro_seconds = micro_seconds % MILLION;
}
alarm_set = malloc(sizeof (struct itimerval));
alarm_set->it_value.tv_sec = seconds;
alarm_set->it_value.tv_usec = micro_seconds;
alarm_set->it_interval.tv_sec = (seconds == 0 && micro_seconds == 0) ? 0 : 2;
alarm_set->it_interval.tv_usec = 0;
if (setitimer(ITIMER_REAL, alarm_set, (struct itimerval *) NULL) == -1) {
pause();
}
free(alarm_set);
}
我已经调用了这个 timeout_timer 函数,如下所示:
timeout_timer(3,0);
memset(rcv_msg,0x0, MAX_MSG);
if ((n = recv(sd, rcv_msg, MAX_MSG, 0)) <= 0)
{
timeout_timer(0,0);
close(sd);
break;
}
else
{
timeout_timer(0,0);
trim_space(rcv_msg);
}
在超时限制内接收数据时,它工作正常。但是当计时器到期时它卡住了。请帮我弄清楚。