199d528d4SDag-Erling Smørgrav.\"- 299d528d4SDag-Erling Smørgrav.\" Copyright (c) 2017 Dag-Erling Smørgrav 399d528d4SDag-Erling Smørgrav.\" All rights reserved. 499d528d4SDag-Erling Smørgrav.\" 599d528d4SDag-Erling Smørgrav.\" Redistribution and use in source and binary forms, with or without 699d528d4SDag-Erling Smørgrav.\" modification, are permitted provided that the following conditions 799d528d4SDag-Erling Smørgrav.\" are met: 899d528d4SDag-Erling Smørgrav.\" 1. Redistributions of source code must retain the above copyright 999d528d4SDag-Erling Smørgrav.\" notice, this list of conditions and the following disclaimer. 1099d528d4SDag-Erling Smørgrav.\" 2. Redistributions in binary form must reproduce the above copyright 1199d528d4SDag-Erling Smørgrav.\" notice, this list of conditions and the following disclaimer in the 1299d528d4SDag-Erling Smørgrav.\" documentation and/or other materials provided with the distribution. 1399d528d4SDag-Erling Smørgrav.\" 1499d528d4SDag-Erling Smørgrav.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1599d528d4SDag-Erling Smørgrav.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1699d528d4SDag-Erling Smørgrav.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1799d528d4SDag-Erling Smørgrav.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1899d528d4SDag-Erling Smørgrav.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1999d528d4SDag-Erling Smørgrav.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2099d528d4SDag-Erling Smørgrav.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2199d528d4SDag-Erling Smørgrav.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2299d528d4SDag-Erling Smørgrav.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2399d528d4SDag-Erling Smørgrav.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2499d528d4SDag-Erling Smørgrav.\" SUCH DAMAGE. 2599d528d4SDag-Erling Smørgrav.\" 26*86b12bbcSEric van Gyzen.Dd March 11, 2022 2799d528d4SDag-Erling Smørgrav.Dt RATECHECK 9 2899d528d4SDag-Erling Smørgrav.Os 2999d528d4SDag-Erling Smørgrav.Sh NAME 3099d528d4SDag-Erling Smørgrav.Nm ratecheck , 3199d528d4SDag-Erling Smørgrav.Nm ppsratecheck 3299d528d4SDag-Erling Smørgrav.Nd "event rate limiting" 3399d528d4SDag-Erling Smørgrav.Sh SYNOPSIS 3499d528d4SDag-Erling Smørgrav.In sys/time.h 3599d528d4SDag-Erling Smørgrav.Ft int 36*86b12bbcSEric van Gyzen.Fn ratecheck "struct timeval *lasttime" "const struct timeval *mininterval" 3799d528d4SDag-Erling Smørgrav.Ft int 3899d528d4SDag-Erling Smørgrav.Fn ppsratecheck "struct timeval *lasttime" "int *curpps" "int maxpps" 3999d528d4SDag-Erling Smørgrav.Sh DESCRIPTION 4099d528d4SDag-Erling SmørgravThe 4199d528d4SDag-Erling Smørgrav.Nm ratecheck 4299d528d4SDag-Erling Smørgravand 4399d528d4SDag-Erling Smørgrav.Nm ppsratecheck 4499d528d4SDag-Erling Smørgravfunctions facilitate rate-limiting of arbitrary events. 4599d528d4SDag-Erling SmørgravThe former enforces a minimum interval between events while the latter 4699d528d4SDag-Erling Smørgravenforces a maximum number of events per second. 4799d528d4SDag-Erling Smørgrav.Pp 4899d528d4SDag-Erling SmørgravThe 4999d528d4SDag-Erling Smørgrav.Nm ratecheck 5099d528d4SDag-Erling Smørgravfunction compares the current time to the value pointed to by 5199d528d4SDag-Erling Smørgrav.Fa lasttime . 5299d528d4SDag-Erling SmørgravIf the difference is equal to or greater than 5399d528d4SDag-Erling Smørgrav.Fa mininterval , 5499d528d4SDag-Erling Smørgravit returns a non-zero value and updates 5599d528d4SDag-Erling Smørgrav.Fa lasttime 5699d528d4SDag-Erling Smørgravto the current time. 5799d528d4SDag-Erling SmørgravOtherwise, it returns zero. 5899d528d4SDag-Erling Smørgrav.Pp 5999d528d4SDag-Erling SmørgravThe 6099d528d4SDag-Erling Smørgrav.Nm ppsratecheck 6199d528d4SDag-Erling Smørgravfunction first compares the current time 6299d528d4SDag-Erling Smørgravto 6399d528d4SDag-Erling Smørgrav.Fa lasttime . 6499d528d4SDag-Erling SmørgravIf at least a full second has passed, the value pointed to by the 6599d528d4SDag-Erling Smørgrav.Fa curpps 6699d528d4SDag-Erling Smørgravargument is reset to 1 and 6799d528d4SDag-Erling Smørgrav.Fa lasttime 6899d528d4SDag-Erling Smørgravis updated to the current time. 6999d528d4SDag-Erling SmørgravOtherwise, 7099d528d4SDag-Erling Smørgrav.Fa curpps 7199d528d4SDag-Erling Smørgravis incremented and 7299d528d4SDag-Erling Smørgrav.Fa lasttime 7399d528d4SDag-Erling Smørgravis left untouched. 7499d528d4SDag-Erling SmørgravIn either case, 7599d528d4SDag-Erling Smørgrav.Nm ppsratecheck 7699d528d4SDag-Erling Smørgravreturns a non-zero value if and only if the updated 7799d528d4SDag-Erling Smørgrav.Fa curpps 7899d528d4SDag-Erling Smørgravis less than or equal to 7999d528d4SDag-Erling Smørgrav.Fa maxpps 8099d528d4SDag-Erling Smørgravor 8199d528d4SDag-Erling Smørgrav.Fa maxpps 8299d528d4SDag-Erling Smørgravis negative. 8399d528d4SDag-Erling Smørgrav.Sh SEE ALSO 8499d528d4SDag-Erling Smørgrav.Xr counter 9 8599d528d4SDag-Erling Smørgrav.Sh HISTORY 8699d528d4SDag-Erling SmørgravThe 8799d528d4SDag-Erling Smørgrav.Nm ratecheck 8899d528d4SDag-Erling Smørgravand 8999d528d4SDag-Erling Smørgrav.Nm ppsratecheck 9099d528d4SDag-Erling Smørgravfunctions first appeared in 9199d528d4SDag-Erling Smørgrav.Fx 5.1 . 92