Languages: English · Русский
Windows tray tool that force-closes
TslGame(PUBG) TCP sockets so you can skip the 1–2 minute black screen when returning to the lobby after a match. It lives in the system tray: a click closes the sockets, a notification reports the result.
Download & run · How it works · Build · CLI
- The problem
- Quick start
- How it works
- Requirements
- In-game usage
- CLI reference
- Build from source
- Architecture
- Releases & CI
- Contributing
- License
When a PUBG match ends, Exit to Lobby often leaves you on a black screen for 1–2 minutes. It looks like a hang, but the process is still running: the client is waiting for a TCP connection that never closes cleanly.
pubg-lobby-fix finds TslGame sockets and removes them via the Windows IP Helper API (SetTcpEntry → DELETE_TCB), verifies the result, and falls back to a short Windows Filtering Platform traffic block for anything SetTcpEntry cannot delete (e.g. IPv6 sockets, which have no public delete API).
Important
Closing sockets needs administrator rights. If you start the tool unelevated, it relaunches itself through a UAC prompt automatically (opt out with -no-elevate).
Tip
The tool keeps itself up to date: on start it downloads the latest release, verifies its sha256 checksum, swaps the executable and restarts into the new version. Opt out with -no-update.
Open the Latest Release and grab the zip for your CPU:
| OS | Architecture | Release asset |
|---|---|---|
| Windows | x64 (amd64) | pubg-lobby-fix_*_windows_amd64.zip |
| Windows | ARM64 | pubg-lobby-fix_*_windows_arm64.zip |
Extract the archive. Inside: pubg-lobby-fix.exe, LICENSE, README.md.
Right-click pubg-lobby-fix.exe → Run as administrator, or from an elevated PowerShell / cmd:
.\pubg-lobby-fix.exeThe tool lives in the system tray (a green icon with a lightning bolt) and waits for the global hotkey Ctrl+Shift+L. When started directly (double-click or the UAC relaunch), its console window is hidden — with -no-tray it stays a normal console app instead. Console output looks like:
time="2026-09-05 18:12:03" level=INFO msg="waiting for hotkey" hotkey=ctrl+shift+l processes=TslGame
time="2026-09-05 18:14:11" level=INFO msg="hotkey pressed, closing lobby connections"
time="2026-09-05 18:14:12" level=INFO msg=done closed=7 already_gone=0 failed=0 survived=0
- Match over → press Exit to Lobby.
- Press
Ctrl+Shift+L(or your custom hotkey) — or left-click the tray icon. - A Windows notification reports the result (
Sockets closed,Nothing to close, …) — the black screen usually clears immediately.
Stop the tool from the tray icon menu (Exit) or with Ctrl+C in the console window.
One-shot mode (close sockets and exit)
.\pubg-lobby-fix.exe -onceList sockets without closing
.\pubg-lobby-fix.exe -list| Step | What the program does | WinAPI / package |
|---|---|---|
| 1 | Finds TslGame processes and their executables |
Toolhelp32 (internal/process) |
| 2 | Reads the IPv4 and IPv6 TCP tables with PIDs | GetExtendedTcpTable (internal/tcp) |
| 3 | Deletes each live IPv4 control block (DELETE_TCB), then re-reads the table and retries the survivors for a few rounds |
SetTcpEntry (internal/tcp) |
| 4 | If anything survives (IPv6 has no delete API), briefly blocks all game traffic via WFP filters that vanish when the tool exits, even on a crash | FwpmFilterAdd0 in a dynamic session (internal/wfp) |
| 5 | Trigger — global Windows hotkey or a left click on the tray icon | RegisterHotKey (internal/hotkey), Shell_NotifyIconW (internal/tray) |
The game process is not killed. Only TCP control blocks for the selected process are torn down (or its traffic is briefly blocked); the client handles the drop and returns to the lobby.
| OS | Windows 10 / 11 only (iphlpapi.dll, user32.dll) |
| Privileges | Administrator (requested automatically via UAC) |
| Game | Running PUBG client (TslGame.exe) |
| Build | Go 1.27+ (only if you build yourself) |
Linux and macOS are not supported — the required WinAPI is missing there.
┌─────────────────────────────────────────────────────────┐
│ 1. Start pubg-lobby-fix.exe as Administrator │
│ 2. Play as usual │
│ 3. Match end → Exit to Lobby → black screen │
│ 4. Press Ctrl+Shift+L (or click the tray icon) │
│ 5. Lobby without the long wait │
└─────────────────────────────────────────────────────────┘
Tip
Change the hotkey with -hotkey f9 or -hotkey alt+shift+q. Format: modifiers ctrl / alt / shift / win plus a key (a–z, 0–9, f1–f24, space, esc, …).
Warning
Closing all TslGame TCP connections mid-match will drop your network session. Use this when you are already exiting to the lobby — not during an active fight.
pubg-lobby-fix [flags]
| Flag | Default | Description |
|---|---|---|
-hotkey |
ctrl+shift+l |
Global hotkey |
-process |
TslGame |
Comma-separated process names (no .exe) |
-pause |
25ms |
Delay between SetTcpEntry calls |
-rounds |
4 |
Close + verify rounds before the traffic block fallback |
-block |
10s |
WFP fallback: block all game traffic for this long when some connections survive (0 disables) |
-no-elevate |
false |
Do not relaunch with administrator rights |
-no-update |
false |
Disable automatic self-update on start |
-no-tray |
false |
Do not show the tray icon; keep the console window |
-once |
false |
Close connections once and exit |
-list |
false |
List sockets only; do not close |
-json |
false |
With -list: print connections as JSON to stdout (logs go to stderr) |
-version |
— | Version / commit / build date |
-v |
false |
Debug logs (slog) |
-h |
— | Help |
# Background mode with a custom hotkey
.\pubg-lobby-fix.exe -hotkey f9
# Multiple process names
.\pubg-lobby-fix.exe -process TslGame,PUBG
# Diagnostics
.\pubg-lobby-fix.exe -list -v
# Machine-readable connection list for scripts
.\pubg-lobby-fix.exe -list -json
# Release version string
.\pubg-lobby-fix.exe -version- Windows
- Go 1.27+
- Git
git clone https://github.com/suprunchuk/pubg-lobby-fix.git
cd pubg-lobby-fix
go build -o pubg-lobby-fix.exe .go test -shuffle=on ./...go install github.com/suprunchuk/pubg-lobby-fix@latestThe binary lands in %USERPROFILE%\go\bin (add that folder to PATH). The tool requests administrator rights itself via UAC.
pubg-lobby-fix/
├── main.go # CLI, flags, version ldflags
├── internal/
│ ├── app/ # orchestration: hotkey/tray → list → close → verify
│ ├── tcp/ # GetExtendedTcpTable (v4+v6) + SetTcpEntry
│ ├── wfp/ # WFP dynamic-session traffic block fallback
│ ├── elevate/ # elevation check + UAC relaunch
│ ├── process/ # PID lookup by name
│ ├── hotkey/ # RegisterHotKey + message loop
│ └── tray/ # Shell_NotifyIcon: icon, menu, notifications
└── .github/workflows/ # test, security, release
┌─────────────┐
Ctrl+Shift+L ───►│ hotkey │
└──────┬──────┘
│
▼
┌─────────────┐ Toolhelp32
│ app │◄──────────────── process names
└──────┬──────┘
list │ │ close + verify rounds
▼ ▼
┌──────────────────────────┐ survivors?
│ tcp │────────────┐
│ GetExtendedTcpTable │ │
│ SetTcpEntry(DELETE_TCB) │ ▼
└──────────────────────────┘ ┌──────────────────┐
│ wfp │
│ dynamic session: │
│ block game exe │
│ for a few secs │
└──────────────────┘
Packages live under internal/ — this is an application, not a public library.
Pushing a v* tag runs GoReleaser: Windows binaries (amd64/arm64), checksums.txt, and a changelog from commits since the previous tag.
git tag v1.0.1
git push origin v1.0.1On main / PRs:
| Workflow | Checks |
|---|---|
| test.yml | go test, coverage |
| security.yml | govulncheck, gosec, CodeQL, Bearer |
| release.yml | release on tag |
Dependabot updates Go modules and GitHub Actions weekly.
Basic loop:
go test -shuffle=on ./...
go build -o pubg-lobby-fix.exe .Details: CONTRIBUTING.md. Bugs and ideas: Issues.
MIT © 2026 Pasha Suprunchuk
Disclaimer
This tool changes the network connection state of a local Windows process. Use at your own risk. The author is not affiliated with PUBG / Krafton / Microsoft. Follow the game rules and platform Terms of Service.