How to Fix the 'Address Already in Use' (Port in Use) Error on Your MU Online Server
Learn how to identify which process is holding the ConnectServer or GameServer port, safely terminate that process, and prevent the 'Address already in use' error from blocking your MU Online server's startup again.
The "Address already in use" error (or, in some builds, "bind failed," "port already in use") appears when the ConnectServer, JoinServer, or GameServer tries to open (bind) a TCP port that's already occupied by another process — whether a previous instance of the emulator itself that didn't close pr
The "Address already in use" error (or, in some builds, "bind failed," "port already in use") appears when the ConnectServer, JoinServer, or GameServer tries to open (bind) a TCP port that's already occupied by another process — whether a previous instance of the emulator itself that didn't close properly, or some other program coincidentally using the same port. Unlike a configuration error, this is an operating system state error, and the fix involves identifying and freeing the process holding the port before trying to start the server again. This tutorial shows how to diagnose it, safely terminate the process, and prevent it from happening again.
Why this error happens
Every process that opens a network port (bind) reserves that port exclusively for itself while it's running. If a previous session's GameServer.exe crashed, was force-closed via Task Manager, or the computer restarted without a clean shutdown, it's possible the old process is still "alive" in the background (or that the operating system hasn't fully released the port yet, in the TCP TIME_WAIT state), preventing the new instance from using the same port.
Symptoms and where they appear
| Where the error appears | Typical message | Affected process |
|---|---|---|
| GameServer console on startup | "bind failed" / "Address already in use" | GameServer.exe |
| ConnectServer console on startup | "Could not bind socket on port 44405" | ConnectServer.exe |
| MySQL error log | "Port 3306 already in use" | mysqld.exe |
| Generic Windows error | "Only one usage of each socket address is normally permitted" | Any TCP service |
Step 1 — Identify which process is using the port
On Windows, use netstat combined with findstr to find the PID (process identifier) occupying the port in question:
netstat -ano | findstr :44405
netstat -ano | findstr :55901
The last column of the result is the PID. Note it down for the next step.
Step 2 — Find the process name from the PID
With the PID in hand, identify which program it belongs to before terminating anything blindly:
Get-Process -Id <PID>
This avoids the classic mistake of terminating a system process or another program that coincidentally happens to be using that port.
Step 3 — Safely terminate the old process
If the identified process really is an old instance of the emulator itself (e.g., a stuck GameServer.exe), terminate it:
Stop-Process -Id <PID> -Force
Always confirm the process name first (Step 2) before using -Force, especially on servers shared with other services.
Step 4 — Wait out TCP's TIME_WAIT, if applicable
If netstat shows the port in the TIME_WAIT state (not LISTENING) with no process associated with it, the operating system is still in the standard TCP protocol wait period after the previous connection closed (usually between 30 seconds and 4 minutes, depending on the Windows configuration). In that case, there's no process to kill — just wait it out, or restart the network service.
netstat -ano | findstr TIME_WAIT
Step 5 — Configure socket reuse in the emulator (SO_REUSEADDR)
Newer emulators (some IGCN and MuEMU builds) let you enable immediate address/port reuse in the server configuration, avoiding the TIME_WAIT problem during frequent restarts in development and testing:
[Network]
ReuseAddress = 1
Not every emulator exposes this option — check the documentation for the specific build you use.
Step 6 — Separate test and production ports
A common mistake in teams with more than one admin is running a second emulator instance (a test/staging environment) using the exact same ports as production on the same machine. Set up a dedicated port range for testing:
| Environment | ConnectServer | GameServer |
|---|---|---|
| Production | 44405 | 55901 |
| Test/Staging | 44415 | 55911 |
Step 7 — Adopt a clean server shutdown
Whenever you stop the server for maintenance, use the emulator's own shutdown command (many have a console command like shutdown or /quit) instead of closing the console window with X or killing the process via Task Manager. A clean shutdown closes the sockets properly and releases the port immediately, avoiding the problem on the next startup.
Step 8 — Run as a Windows service for greater stability
For production servers, consider running the ConnectServer and GameServer as Windows services (using a tool like NSSM — Non-Sucking Service Manager) instead of executables opened manually in console windows. Services have a more predictable lifecycle and reduce the chance of "ghost" processes getting stuck after power outages or unexpected restarts.
Common errors and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| "Address already in use" when starting the GameServer | A previous instance is still running | Identify the PID with netstat and terminate the process |
| Port shows TIME_WAIT with no process attached | Standard TCP protocol wait period | Wait the standard time or enable socket reuse |
| Error returns every time the server restarts | Shutdown always done forcibly | Use the emulator's clean shutdown command |
| Two environments (test and production) conflict | Same port used in both instances | Separate the ports by environment |
| MySQL won't start with a port error | Another MySQL service already running on 3306 | Stop the duplicate service or change one of their ports |
| Error only after a power outage | Processes not shut down properly | Migrate to running as a Windows service (NSSM) |
Resolution checklist
- PID occupying the port identified via netstat.
- Process name confirmed before terminating it.
- Old process terminated, or TIME_WAIT waited out.
- Socket reuse enabled in the configuration, if available.
- Test and production ports separated.
- Server shutdown always done via the clean shutdown command.
- Critical services (GameServer/ConnectServer) migrated to run as a Windows service, if in production.
After eliminating port conflicts, also review the firewall rules tied to each opened port, since these two problems tend to show up together during server migrations — see the MU Online server setup tutorial for a complete view of the recommended infrastructure.
Frequently asked questions
Why does this error appear out of nowhere, if the server started fine yesterday?
Usually because a previous instance of the GameServer or ConnectServer wasn't shut down properly (crash, power outage, forced window close), leaving a 'ghost' process still holding the port in memory, even though it isn't responding to anything.
Can I just change the server's port instead of killing the old process?
You can, and it's sometimes the fastest fix in production, but that only works around the symptom. If the ghost process keeps running, it will keep consuming memory and can cause inconsistent database behavior (duplicate connections). It's always better to identify and terminate the process, not just switch ports.
Can TCP's TIME_WAIT state cause this error even with no process running at all?
Yes. After a TCP connection closes, the operating system keeps the port in the TIME_WAIT state for a while (typically 30 to 240 seconds) before fully releasing it. If you try to restart the server immediately after a shutdown, you may see this error even with no active process — the fix is to wait it out or configure socket reuse (SO_REUSEADDR) in the emulator.
How do I avoid this happening every time I restart the server?
Always use a clean shutdown of the service (the emulator's own shutdown command, or stopping the Windows service if it's running as one) instead of closing the console window or force-killing the process via Task Manager. A clean shutdown releases the port immediately.
Can this error be caused by two different servers trying to use the same port?
Yes, it's common when an admin runs a second emulator instance (a test environment) using the same port configuration as production. Always use different ports for test and production instances.