respondd: timeout is now calculated inside accept_request
This commit is contained in:
parent
1ac18054c1
commit
140e1937b6
|
@ -390,9 +390,17 @@ static struct json_object * handle_request(char *request, bool *compress) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// the return value indicates whether there was a request
|
// Wait for an incomming request and schedule it.
|
||||||
|
//
|
||||||
|
// 1a. If the schedule is empty, we will wait an nearly infinite time.
|
||||||
|
// 1b. If we have scheduled requests, we only wait for incomming requests
|
||||||
|
// until we reach the scheduling deadline.
|
||||||
|
// 2a. If the incomming request was sent to a multicast destination IPv6,
|
||||||
|
// choose a random delay between 0 and max_multicast_delay milliseconds.
|
||||||
|
// 2b. If the incomming request was sent to a unicast destination, delay
|
||||||
|
// is zero.
|
||||||
static bool accept_request(struct request_schedule *schedule, int sock,
|
static bool accept_request(struct request_schedule *schedule, int sock,
|
||||||
uint64_t timeout, uint64_t max_multicast_delay) {
|
uint64_t max_multicast_delay) {
|
||||||
char input[REQUEST_MAXLEN];
|
char input[REQUEST_MAXLEN];
|
||||||
ssize_t input_bytes;
|
ssize_t input_bytes;
|
||||||
struct sockaddr_in6 addr;
|
struct sockaddr_in6 addr;
|
||||||
|
@ -402,6 +410,7 @@ static bool accept_request(struct request_schedule *schedule, int sock,
|
||||||
struct cmsghdr *cmsg;
|
struct cmsghdr *cmsg;
|
||||||
|
|
||||||
// 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 = timeout / 1000;
|
||||||
t.tv_usec = (timeout % 1000) * 1000;
|
t.tv_usec = (timeout % 1000) * 1000;
|
||||||
|
@ -619,7 +628,7 @@ int main(int argc, char **argv) {
|
||||||
struct request_schedule schedule = {};
|
struct request_schedule schedule = {};
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
accept_request(&schedule, sock, schedule_idle_time(&schedule), max_multicast_delay);
|
accept_request(&schedule, sock, max_multicast_delay);
|
||||||
serve_request(&schedule, sock);
|
serve_request(&schedule, sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue