ZNC seems to delay send messages up to weeks #1061

Closed
opened 2026-10-05 05:01:02 +02:00 by adam · 7 comments
Owner

I am using ZNC 1.9.1 with Gentoo as my main bouncer. I noticed, that I have a very strange behauvior. Send messages are being extremly delayed and its possible, that other people see them weeks later. Not a single error is shown on my client. When I do send a message, it's being shown on my chatlog normally, but apperntly in reality, it has not been send. But at the same time, I am receiving messages from channel without any problems. Apparently those messages are silently then send from days up to weeks later really send.

I have absolutly no idea, how to debug this. Any ideas?

I am using ZNC 1.9.1 with Gentoo as my main bouncer. I noticed, that I have a very strange behauvior. Send messages are being extremly delayed and its possible, that other people see them weeks later. Not a single error is shown on my client. When I do send a message, it's being shown on my chatlog normally, but apperntly in reality, it has not been send. But at the same time, I am receiving messages from channel without any problems. Apparently those messages are silently then send from days up to weeks later really send. I have absolutly no idea, how to debug this. Any ideas? <!-- github-sync-id:2997654800 -->
adam closed this issue 2026-10-05 05:01:02 +02:00
Author
Owner

There may be a small delay caused by flood protection, but definitely not weeks. What are your settings for flood?

What modules are loaded?

There may be a small delay caused by flood protection, but definitely not weeks. What are your settings for flood? What modules are loaded? <!-- github-comment-id:2807547593 -->
Author
Owner

What are your settings for flood?

Flooding-protection: enabled
Flood rate: 100.00
Flood burst: 100
Channel entry delay: 0

What modules are loaded?

You mean this?

AnonIPLimit = 10
AuthOnlyViaModule = false
ConfigWriteDelay = 0
ConnectDelay = 5
HideVersion = true
LoadModule = webadmin
LoadModule = adminlog
LoadModule = blockuser
LoadModule = chansaver
LoadModule = fail2ban
LoadModule = identfile
LoadModule = lastseen
LoadModule = log
LoadModule = modperl
LoadModule = modpython
LoadModule = certauth
LoadModule = corecaps
MaxBufferSize = 1024
Motd = xxx
ProtectWebSessions = true
SSLCertFile = /etc/ssl/znc/xxx.crt
SSLDHParamFile = /etc/ssl/znc/dh.param
SSLKeyFile = /etc/ssl/znc/xxx.key
ServerThrottle = 30
Skin = dark-clouds
StatusPrefix = *
Version = 1.9.1

<Listener listener0>
        AllowIRC = true
        AllowWeb = true
        IPv4 = true
        IPv6 = true
        Port = 10346
        SSL = true
        URIPrefix = /
</Listener>

<User xxx>
        Admin = true
        Allow = *
        AltNick = xxxx
        AppendTimestamp = false
        AuthOnlyViaModule = false
        AutoClearChanBuffer = true
        AutoClearQueryBuffer = false
        ChanBufferSize = 1024
        ClientEncoding = ^UTF-8
        DenyLoadMod = false
        DenySetBindHost = false
        DenySetCTCPReplies = false
        DenySetIdent = false
        DenySetNetwork = false
        DenySetQuitMsg = false
        DenySetRealName = false
        Ident = xxxxx
        JoinTries = 10
        Language = de-DE
        LoadModule = chansaver
        LoadModule = controlpanel
        LoadModule = alias
        LoadModule = autoattach
        LoadModule = autoreply
        LoadModule = bouncedcc
        LoadModule = cert
        LoadModule = clearbufferonmsg
        LoadModule = clientnotify
        LoadModule = ctcpflood 4 2
        LoadModule = dcc
        LoadModule = disconkick
        LoadModule = listsockets
        LoadModule = log
        LoadModule = missingmotd
        LoadModule = notes
        LoadModule = perform
        LoadModule = pyeval
        MaxJoins = 0
        MaxNetworks = 10
        MaxQueryBuffers = 0
        MultiClients = true
        Nick = xxxxx
        NoTrafficTimeout = 300
        PrependTimestamp = true
        QueryBufferSize = 1024
        QuitMsg = xxxxx
        RealName = xxxxxx
        Skin = dark-clouds
        TimestampFormat = [%H:%M:%S]
        Timezone = Europe/Berlin

        <Network Hackint>
                Encoding = ^UTF-8
                FloodBurst = 100
                FloodRate = 100.00
                IRCConnectEnabled = true
                JoinDelay = 1
                LoadModule = simple_away
                LoadModule = alias
                LoadModule = autoattach
                LoadModule = autocycle
                LoadModule = autoop
                LoadModule = autoreply
                LoadModule = autovoice
                LoadModule = cert
                LoadModule = chansaver
                LoadModule = crypt
                LoadModule = keepnick
                LoadModule = kickrejoin
                LoadModule = log
                LoadModule = modtcl
                LoadModule = nickserv
                LoadModule = perform
                LoadModule = perleval
                LoadModule = pyeval
                LoadModule = route_replies
                LoadModule = savebuff
                LoadModule = stickychan
                LoadModule = sasl
                Server = irc.de.hackint.org +6697
                TrustAllCerts = false
                TrustPKI = true

               <Chan #xxx>
                </Chan>
        </Network>


        <Network Libera>
                Encoding = ^UTF-8
                FloodBurst = 100
                FloodRate = 100.00
                IRCConnectEnabled = true
                JoinDelay = 0
                LoadModule = simple_away
                LoadModule = alias
                LoadModule = autoattach
                LoadModule = autocycle
                LoadModule = autoop
                LoadModule = autoreply
                LoadModule = autovoice
                LoadModule = cert
                LoadModule = chansaver
                LoadModule = crypt
                LoadModule = keepnick
                LoadModule = kickrejoin
                LoadModule = log
                LoadModule = modtcl
                LoadModule = nickserv
                LoadModule = perform
                LoadModule = perleval
                LoadModule = pyeval
                LoadModule = route_replies
                LoadModule = sasl
                LoadModule = savebuff
                LoadModule = stickychan
                Server = irc.libera.chat +6697
                TrustAllCerts = false
                TrustPKI = true

                <Chan #gentoo-dev>
                        AutoClearChanBuffer = false
                </Chan>
        </Network>

        <Network RizonIRC>
                Encoding = ^UTF-8
                FloodBurst = 100
                FloodRate = 100.00
                IRCConnectEnabled = true
                JoinDelay = 1
                LoadModule = simple_away
                LoadModule = alias
                LoadModule = autoattach
                LoadModule = autocycle
                LoadModule = autoop
                LoadModule = autoreply
                LoadModule = autovoice
                LoadModule = cert
                LoadModule = chansaver
                LoadModule = crypt
                LoadModule = keepnick
                LoadModule = kickrejoin
                LoadModule = log
                LoadModule = modtcl
                LoadModule = nickserv
                LoadModule = perform
                LoadModule = perleval
                LoadModule = pyeval
                LoadModule = route_replies
                LoadModule = savebuff
                LoadModule = stickychan
                LoadModule = sasl
                Server = irc.rizon.net +6697
                TrustAllCerts = false
                TrustPKI = true

                <Chan #xxx>
                        AutoClearChanBuffer = false
                </Chan>
        </Network>

        <Pass password>
                Hash = xxx
                Method = Argon2id
        </Pass>
</User>

> What are your settings for flood? Flooding-protection: enabled Flood rate: 100.00 Flood burst: 100 Channel entry delay: 0 > What modules are loaded? You mean this? ``` AnonIPLimit = 10 AuthOnlyViaModule = false ConfigWriteDelay = 0 ConnectDelay = 5 HideVersion = true LoadModule = webadmin LoadModule = adminlog LoadModule = blockuser LoadModule = chansaver LoadModule = fail2ban LoadModule = identfile LoadModule = lastseen LoadModule = log LoadModule = modperl LoadModule = modpython LoadModule = certauth LoadModule = corecaps MaxBufferSize = 1024 Motd = xxx ProtectWebSessions = true SSLCertFile = /etc/ssl/znc/xxx.crt SSLDHParamFile = /etc/ssl/znc/dh.param SSLKeyFile = /etc/ssl/znc/xxx.key ServerThrottle = 30 Skin = dark-clouds StatusPrefix = * Version = 1.9.1 <Listener listener0> AllowIRC = true AllowWeb = true IPv4 = true IPv6 = true Port = 10346 SSL = true URIPrefix = / </Listener> <User xxx> Admin = true Allow = * AltNick = xxxx AppendTimestamp = false AuthOnlyViaModule = false AutoClearChanBuffer = true AutoClearQueryBuffer = false ChanBufferSize = 1024 ClientEncoding = ^UTF-8 DenyLoadMod = false DenySetBindHost = false DenySetCTCPReplies = false DenySetIdent = false DenySetNetwork = false DenySetQuitMsg = false DenySetRealName = false Ident = xxxxx JoinTries = 10 Language = de-DE LoadModule = chansaver LoadModule = controlpanel LoadModule = alias LoadModule = autoattach LoadModule = autoreply LoadModule = bouncedcc LoadModule = cert LoadModule = clearbufferonmsg LoadModule = clientnotify LoadModule = ctcpflood 4 2 LoadModule = dcc LoadModule = disconkick LoadModule = listsockets LoadModule = log LoadModule = missingmotd LoadModule = notes LoadModule = perform LoadModule = pyeval MaxJoins = 0 MaxNetworks = 10 MaxQueryBuffers = 0 MultiClients = true Nick = xxxxx NoTrafficTimeout = 300 PrependTimestamp = true QueryBufferSize = 1024 QuitMsg = xxxxx RealName = xxxxxx Skin = dark-clouds TimestampFormat = [%H:%M:%S] Timezone = Europe/Berlin <Network Hackint> Encoding = ^UTF-8 FloodBurst = 100 FloodRate = 100.00 IRCConnectEnabled = true JoinDelay = 1 LoadModule = simple_away LoadModule = alias LoadModule = autoattach LoadModule = autocycle LoadModule = autoop LoadModule = autoreply LoadModule = autovoice LoadModule = cert LoadModule = chansaver LoadModule = crypt LoadModule = keepnick LoadModule = kickrejoin LoadModule = log LoadModule = modtcl LoadModule = nickserv LoadModule = perform LoadModule = perleval LoadModule = pyeval LoadModule = route_replies LoadModule = savebuff LoadModule = stickychan LoadModule = sasl Server = irc.de.hackint.org +6697 TrustAllCerts = false TrustPKI = true <Chan #xxx> </Chan> </Network> <Network Libera> Encoding = ^UTF-8 FloodBurst = 100 FloodRate = 100.00 IRCConnectEnabled = true JoinDelay = 0 LoadModule = simple_away LoadModule = alias LoadModule = autoattach LoadModule = autocycle LoadModule = autoop LoadModule = autoreply LoadModule = autovoice LoadModule = cert LoadModule = chansaver LoadModule = crypt LoadModule = keepnick LoadModule = kickrejoin LoadModule = log LoadModule = modtcl LoadModule = nickserv LoadModule = perform LoadModule = perleval LoadModule = pyeval LoadModule = route_replies LoadModule = sasl LoadModule = savebuff LoadModule = stickychan Server = irc.libera.chat +6697 TrustAllCerts = false TrustPKI = true <Chan #gentoo-dev> AutoClearChanBuffer = false </Chan> </Network> <Network RizonIRC> Encoding = ^UTF-8 FloodBurst = 100 FloodRate = 100.00 IRCConnectEnabled = true JoinDelay = 1 LoadModule = simple_away LoadModule = alias LoadModule = autoattach LoadModule = autocycle LoadModule = autoop LoadModule = autoreply LoadModule = autovoice LoadModule = cert LoadModule = chansaver LoadModule = crypt LoadModule = keepnick LoadModule = kickrejoin LoadModule = log LoadModule = modtcl LoadModule = nickserv LoadModule = perform LoadModule = perleval LoadModule = pyeval LoadModule = route_replies LoadModule = savebuff LoadModule = stickychan LoadModule = sasl Server = irc.rizon.net +6697 TrustAllCerts = false TrustPKI = true <Chan #xxx> AutoClearChanBuffer = false </Chan> </Network> <Pass password> Hash = xxx Method = Argon2id </Pass> </User> ``` <!-- github-comment-id:2807568442 -->
Author
Owner

Why have you set them to 100/100? That's the issue.

ZNC is sending to server no more than 1 line per 100 seconds.

The default values are rate=2, burst=9, please try those

Why have you set them to 100/100? That's the issue. ZNC is sending to server no more than 1 line per 100 seconds. The default values are rate=2, burst=9, please try those <!-- github-comment-id:2807577573 -->
Author
Owner

Why have you set them to 100/100? That's the issue.

I can't say, why I have set it. I haven't touched for a long time my config. Maybe just an error, which I never noticed or from some old version migration? Could you please explain me that option? Based on docs, burst set maximum count of lines to be send at once and rate sets a pause, when that limit is reached.

Give my wrong setting with 100/100, I don't understand, how that works as an issue? Wouldn't that mean, that first after sending 100 lines, I would hit flood protection, but in case for 100 seconds? Sending a single line into channel should never trigger that? Did I missunderstand something here?

ZNC is sending to server no more than 1 line per 100 seconds.

What do you mean by this?

The default values are rate=2, burst=9, please try those

Thank you, I've set back default and will observe.

> Why have you set them to 100/100? That's the issue. I can't say, why I have set it. I haven't touched for a long time my config. Maybe just an error, which I never noticed or from some old version migration? Could you please explain me that option? Based on [docs](https://wiki.znc.in/Configuration), burst set maximum count of lines to be send at once and rate sets a pause, when that limit is reached. Give my wrong setting with 100/100, I don't understand, how that works as an issue? Wouldn't that mean, that first after sending 100 lines, I would hit flood protection, but in case for 100 seconds? Sending a single line into channel should never trigger that? Did I missunderstand something here? > ZNC is sending to server no more than 1 line per 100 seconds. What do you mean by this? > The default values are rate=2, burst=9, please try those Thank you, I've set back default and will observe. <!-- github-comment-id:2807598193 -->
Author
Owner

There are Burst lines allowed to be sent. Every time the line is successfully sent, the counter is decreased. Every Rate seconds, the counter is increased (capped at Burst) and the next line from the queue is sent (decreasing the counter again).

So after your first 100, or maybe 150 messages the counter is always near 0, and since that moment you can only send 1 message per 100 seconds. That includes PONG, NAMES and other internal messages, not only PRIVMSG.

Because server doesn't see any traffic from you for 100 seconds, it starts sending PINGs. But PONGs are put in front of the queue to avoid disconnects. So most of this slow traffic will probably be just PONGs, and anything else will happen to be sent more rarely

There are Burst lines allowed to be sent. Every time the line is successfully sent, the counter is decreased. Every Rate seconds, the counter is increased (capped at Burst) and the next line from the queue is sent (decreasing the counter again). So after your first 100, or maybe 150 messages the counter is always near 0, and since that moment you can only send 1 message per 100 seconds. That includes PONG, NAMES and other internal messages, not only PRIVMSG. Because server doesn't see any traffic from you for 100 seconds, it starts sending PINGs. But PONGs are put in front of the queue to avoid disconnects. So most of this slow traffic will probably be just PONGs, and anything else will happen to be sent more rarely <!-- github-comment-id:2807617497 -->
Author
Owner

Whoops. I understand the problem now. That would perfectly explain the issue ineed. Thanks for spotting this. I will observe this the next days, and close the issue then. But I guess, it should now work afte restart.

Whoops. I understand the problem now. That would perfectly explain the issue ineed. Thanks for spotting this. I will observe this the next days, and close the issue then. But I guess, it should now work afte restart. <!-- github-comment-id:2807625905 -->
Author
Owner

I tend to say, its now fixed. Thanks again.

I tend to say, its now fixed. Thanks again. <!-- github-comment-id:2810589117 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/znc#1061