Closed mweinelt closed 3 years ago
This happens when CptHook cannot "take the event out of channel", i.e. send to IRC. Even in normal operation, CptHook may easily become overwhelmed and not immediately process an incoming webhook. This leads to the corresponding socket staying open. If during this time another request is accepted, this opens another socket, which, again, will block and stay open as long as the message is not dispatched to IRC.
See this gist for a simple config and the scripts mentioned below.
CptHook -config cpthook.yml &
send_test_messages.sh 0.5s
If for whatever reason no messages can be passed to the IRC server at all, this problem is exacerbated and the sockets accumulate until the user limit is hit, as seen in the OP.
One of the reasons why a message would not be passed on to the IRC server (apart from abysmal performance) would be that the connection to the server was never successful. You can easily test this by blackholing all traffic to the respective server and then starting CptHook:
blackhole.sh add irc.host
CptHook -config cpthook.yml &
send_test_messages.sh
Even if you disable the blackhole later, CptHook will not reconnect.
blackhole.sh del irc.host
This condition may occur during early boot if CptHook is started before networking is fully set up.
Hey @deraffe thanks for that super detailed investigation and documentation of the behavior. Because a new release is long overdue, I will use this bug as a motivator for a new release :)
Heyho @fleaz – any updates on this?
Yesterday @fleaz and I debugged the issue. Now we know what the irc library can do (and what not). More information about it in https://github.com/fleaz/CptHook/pull/61
Somewhere cpthook leaks sockets.