matabot

a silly irc bot
git clone ssh://anon@git.pastanoggin.com
Log | Files | Refs | README | LICENSE

commit 857e8780e0133566f375c18fe274c410ee1d9967
parent 182fcdb4dc02479e7748c872f6a8d5a0b0fd540b
Author: noodle <noodle@pastanoggin.com>
Date:   Wed,  7 Jan 2026 19:22:31 +0000

refactor ping-pong and make ping check timer start after last message from server

Diffstat:
Mmata_bot.pl | 35+++++++++++++++++++----------------
1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/mata_bot.pl b/mata_bot.pl @@ -294,19 +294,31 @@ sub recvmsg { sub evasdrop { my ($s, $host, $chan, $lists) = @_; - my ($checkping, $msgmax, $pingtime, $pongtime, $prefixlen, $priv); + my ($msgtime, $msgmax, $pingsent, $pingtime, $prefixlen, $priv); - $checkping = 1; + $pingsent = 0; $priv = "PRIVMSG ${chan} :"; - $pongtime = $pingtime = time; + $msgtime = $pingtime = time; while (1) { + if ($pingsent) { + if (time - $pingtime > MAX_LAG) { + # leave if we don't get ponged back on time + logger(LOG_WARN, 'server pong reply timed out'); + return; + } + } elsif (time - $msgtime > LAG_CHECK_TIME) { + # ping server every once in a while + sendmsg($s, "PING :${host}"); + $pingsent = 1; + $pingtime = time; + } defined($_ = recvmsg($s)) or return; - if(not length) { - } elsif (/^PING :([^ ]+)$/) { + next if not length; + $msgtime = time; + if (/^PING :([^ ]+)$/) { sendmsg($s, 'PONG :' . $1); } elsif (/^:[^ ]+ PONG/) { - $pongtime = $pingtime = time; - $checkping = 1; + $pingsent = 0; } elsif (/^:[^ ]+ 352 [^ ]+ [^ ]+ [^ ]+ ([^ ]+)/) { # the extra 2 bytes account for \r\n $msgmax = IRCMAX - length($1) - length($priv) - 2; @@ -321,15 +333,6 @@ sub evasdrop { $r = respond($1, $2, @$lists); sendmsg($s, $priv . substr($r,0,$msgmax)) if length($r); } - if ($checkping and time-$pingtime > LAG_CHECK_TIME) { - # ping server every once in a while and wait for pong - sendmsg($s, "PING :${host}"); - $checkping = 0; - } elsif (not $checkping and time-$pongtime > MAX_LAG) { - # we're leaving if we don't get ponged back on time - logger(LOG_WARN, 'server PONG response timed out'); - return; - } } }