feat: implement graceful shutdown for all tarpit servers#14
Open
vinayaktyagi10 wants to merge 2 commits intohoneynet:mainfrom
Open
feat: implement graceful shutdown for all tarpit servers#14vinayaktyagi10 wants to merge 2 commits intohoneynet:mainfrom
vinayaktyagi10 wants to merge 2 commits intohoneynet:mainfrom
Conversation
- Add SIGINT/SIGTERM signal handlers with sig_atomic_t flag - Replace while(1) with while(keepRunning) in all four pits - Drain client queues and emit disconnect metrics on shutdown - Fix poll/epoll_wait to use bounded timeouts so SIGINT isn't blocked - Handle EINTR in poll, epoll_wait, and recvfrom error paths Affects: telnet_pit, upnp_pit, coap_pit, mqtt_pit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements graceful shutdown handling across all four tarpit servers
(telnet, upnp, coap, mqtt).
Changes
SIGINT/SIGTERMsignal handlers usingsig_atomic_tflagwhile(1)withwhile(keepRunning)in all four pitsdisconnectmetrics foreach active client so Prometheus receives accurate final data
poll/epoll_waitto use bounded timeouts (1000ms) so signaldelivery isn't blocked indefinitely on an empty queue
EINTRinpoll,epoll_wait, andrecvfromerror pathsWhy
Without graceful shutdown, active clients are dropped silently on
SIGINT/SIGTERM(e.g. container restarts), causing the Prometheusexporter to never receive their
disconnectevents. This leads toactive_clientsgauge drift over time and inaccuratetotal_trapped_timedata.
Testing
Each pit was tested individually by running with a 1-second sleep
followed by
SIGINT, confirming clean shutdown output and no lingeringprocesses.