respondd: differentiate between infinite idletime (0) and idletime expired(<0)

This commit is contained in:
lemoer 2016-09-01 18:09:25 +02:00
parent ee7eba75f9
commit 92155f0c51
1 changed files with 12 additions and 9 deletions

View File

@ -205,16 +205,16 @@ bool schedule_push_request(struct request_schedule *s, struct request_task *new_
return true; return true;
} }
uint64_t schedule_idle_time(struct request_schedule *s) { int64_t schedule_idle_time(struct request_schedule *s) {
if (!s->list_head) if (!s->list_head)
// nothing to do yet, wait nearly infinite time // nothing to do yet (0 = infinite time)
return 3600000; return 0;
update_time(); update_time();
int64_t result = s->list_head->scheduled_time - now; int64_t result = s->list_head->scheduled_time - now;
if (result < 0) if (result == 0)
return 0; return -1; // zero is be infinity
else else
return result; return result;
} }
@ -224,7 +224,7 @@ struct request_task * schedule_pop_request(struct request_schedule *s) {
// schedule is empty // schedule is empty
return NULL; return NULL;
if (schedule_idle_time(s) > 0) { if (schedule_idle_time(s) >= 0) {
// nothing to do yet // nothing to do yet
return NULL; return NULL;
} }
@ -408,11 +408,14 @@ static void accept_request(struct request_schedule *schedule, int sock,
struct in6_addr destaddr; struct in6_addr destaddr;
struct cmsghdr *cmsg; struct cmsghdr *cmsg;
int64_t timeout = schedule_idle_time(schedule);
if (timeout < 0)
return;
// set timeout to the socket // set timeout to the socket
uint64_t timeout = schedule_idle_time(schedule);
struct timeval t; struct timeval t;
t.tv_sec = timeout / 1000; t.tv_sec = ((uint64_t) timeout) / 1000;
t.tv_usec = (timeout % 1000) * 1000; t.tv_usec = (((uint64_t) timeout) % 1000) * 1000;
if (setsockopt (sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&t, sizeof(t)) < 0) if (setsockopt (sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&t, sizeof(t)) < 0)
perror("setsockopt failed\n"); perror("setsockopt failed\n");