Доброго дня и ночи!
пробовал так
static int
limit_rate (struct request *req)
{
// char *fwd_for = forwarded_for (req);
u_int cli_spd_limit = 20 * 1024; // get_client_speed_limit (fwd_for);
u_int expected = 1000000 * (double)req->r_bytes / (double)cli_spd_limit;
printf ("bytes: %lu time: %lu expected %lu\n", req->r_bytes, req->r_time,
expected);
if (expected > req->r_time)
{
sleep_usec (expected - req->r_time);
}
}
...
GET_TIME_SLICE(&t1);
if ((nread = read (req->server_fd, buf, buf_size)) <= 0)
break;
GET_TIME_SLICE(&t2);
req->r_bytes = nread;
req->r_time = t2 - t1;
limit_rate (req);
out:
bytes: 1400 time: 111 expected 68359
sleep_usec, nsec: 67565520
но он как то сильно ошибается, вместо 20кб/с - 17
Подскажите пожалуйста где я натупил.
GET_TIME_SLICE - это gettimeofday
sleep_usec - nanosleep
Форум —
Development
