diff options
author | June McEnroe <june@causal.agency> | 2020-05-11 18:05:41 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-05-11 18:16:19 -0400 |
commit | 548c4a3a86a37cf74aac5ef91f84b9a762dc1023 (patch) | |
tree | 810cdf6ea4d26421f4b2a36f3a35bda745fec628 /client.c | |
parent | Pass -1 as backlog to listen(2) (diff) | |
download | pounce-548c4a3a86a37cf74aac5ef91f84b9a762dc1023.tar.gz pounce-548c4a3a86a37cf74aac5ef91f84b9a762dc1023.zip |
Add server send queueing with time interval
This addresses pounce getting killed with "Excess flood" when it sends NAMES commands for too many channels when a client connects. These commands, as well as automatic AWAY commands, are by default throttled to 5 per second. Tested on freenode with 36 channels and 200ms interval.
Diffstat (limited to '')
-rw-r--r-- | client.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/client.c b/client.c index 25707a8..e260bc7 100644 --- a/client.c +++ b/client.c @@ -69,7 +69,7 @@ struct Client *clientAlloc(struct tls *tls) { void clientFree(struct Client *client) { if (!client->need) { if (!(client->caps & CapPassive) && !--active) { - serverFormat("AWAY :%s\r\n", clientAway); + serverEnqueue("AWAY :%s\r\n", clientAway); } } tls_close(client->tls); @@ -122,7 +122,7 @@ static void maybeSync(struct Client *client) { stateSync(client); if (client->setPos) ringSet(client->consumer, client->setPos); if (!(client->caps & CapPassive) && !active++) { - serverFormat("AWAY\r\n"); + serverEnqueue("AWAY\r\n"); } } } |