Cannot Connect to Your Minecraft Server: Every Error Explained
Connection refused, Connection timed out, ReadTimeoutException, Outdated server, Invalid session and the rest - what each error means, who can fix it, and why your console is often empty.
Start here: three questions solve most cases
1. Can the player see the server in their list? If the version and player count show up, the server is perfectly reachable - so the problem happens after they click Join: version, whitelist, login or capacity.
2. How fast does it fail?
- Instantly (under a second) → the port can be reached, but nothing is listening. The server is down, or the port is wrong. Your problem.
- After 20-30 seconds → packets are being dropped on the way. Firewall, port forwarding or routing.
3. How many players are affected? One player while everyone else is fine → their network, their version or their account. Everyone at once → it is the server.
Rule of thumb: Refused = wrong door. Timed out = no door. Incompatible = wrong key. Invalid session = wrong player, not your server.
And remember: an empty console is also an answer. Several of the errors below write nothing to the server log, because the connection never arrived. See the table at the end.
Connection refused: getsockopt
The full error looks like this:
io.netty.channel.AbstractChannel$AnnotatedConnectException:
Connection refused: getsockopt: myserver.com/203.0.113.10:25565
Older Minecraft versions say
no further informationinstead ofgetsockopt. It is exactly the same error. The wording comes from Java, not from Minecraft, and it changed with Java 17. If the player runs 1.17 or newer - so anything modern - they seegetsockopt.
What it means: the packet reached a machine, but nothing is listening on that port. It fails almost instantly.
The usual causes, in order:
- The server is not running, has crashed, or is still starting up
- The player is using the wrong port - usually because they type the hostname without a port while the server is not on 25565
server-portinserver.propertiesdoes not match the port you were assignedserver-ipis filled in, so the server bound to the wrong address- Port forwarding points at an old internal IP
- A proxy in front of the server is down even though the server itself is running
How to find it:
- Check Console for the line
**** FAILED TO BIND TO PORT!. If you see it, the cause is almost always something inserver-ip. Leave that field empty so the server binds to every address. - Test from outside on exactly the address and port you give your players.
- If you use an SRV record, check that the port in it matches
server-port.
Server log: nothing. The connection never arrived.
Connection timed out
io.netty.channel.AbstractChannel$AnnotatedConnectException:
Connection timed out: getsockopt: myserver.com/203.0.113.10:25565
There is also a related error that comes from Minecraft itself rather than the operating system:
io.netty.channel.ConnectTimeoutException:
connection timed out after 30000 ms: myserver.com/203.0.113.10:25565
What it means: no answer came back at all. Packets are being dropped silently. That is why it takes 20-30 seconds, where Connection refused fails immediately.
Causes:
- A firewall is dropping the port - on the server, at the host, or in the router
- The port is not forwarded, or points somewhere wrong
- Players have an outdated IP address, or DNS points elsewhere
- The host's DDoS filter is blocking that player's IP
- The player is behind a school or office network
How to fix it: open the port inbound on TCP at every layer - the server firewall, the host firewall and the router. Then confirm the public address and DNS are correct.
Server log: nothing.
Internal Exception: io.netty.handler.timeout.ReadTimeoutException
What it means: 30 seconds passed without a single byte arriving. The connection was established - it simply stopped responding.
Causes, in order:
- The server's main thread froze for more than 30 seconds - chunk generation, a plugin doing synchronous I/O, a
/reload, or a long GC pause. This is by far the most common cause when everyone drops at once. - The server crashed or was killed by the watchdog
- Genuine packet loss along the way
- A proxy in front of the server stalled
How to find it: if only one player is affected, it is their network. If everyone drops at once, look at server health - Can't keep up! Is the server overloaded? or a thread dump in the console is the proof.
Do not confuse it with
Timed out. That shorter message comes from the server's own keep-alive check and is logged neatly aslost connection: Timed out.ReadTimeoutExceptionis the network layer's own timer.
Server log: usually yes - lost connection: Internal Exception: io.netty.handler.timeout.ReadTimeoutException. But if the server is fully frozen it logs nothing until it thaws. A console that goes completely silent for 30 seconds is itself the diagnosis.
Internal Exception: java.net.SocketException: Connection reset
The older form of the same error, which still dominates search traffic:
Internal Exception: java.io.IOException:
An existing connection was forcibly closed by the remote host
The wording changed with Java 17. If the player runs Minecraft 1.17 or newer they see
Connection reset. Older versions show the long Windows text. It is the same error.
What it means: the connection was torn down rather than closed gracefully.
Causes:
- The server process died mid-session - a crash, the OOM killer, or a stop from the panel
- A firewall or DDoS filter killed the connection on the way
- The router or NAT table dropped the connection
- The player force-closed the game, or toggled a VPN
How to find it: first check whether the server was still running at that moment. If it restarted, this is a crash question, not a network one - look for Killed or exit code 137, which means the server ran out of memory.
Server log: usually yes - lost connection: Internal Exception: java.net.SocketException: Connection reset.
Incompatible client!, Outdated client! and Outdated server!
Here the text depends on which server software you run:
| Error message | Which server | Meaning |
|---|---|---|
Incompatible client! Please use <version> |
Vanilla, Fabric, NeoForge | The versions do not match |
Outdated client! Please use <version> |
Paper, Spigot, Purpur | The player's version is older than the server's |
Outdated server! I'm still on <version> |
Paper, Spigot, Purpur | The player's version is newer than the server's |
The version number in the message is always the server's - including in
Outdated server!. Players often read it as the server saying its own version is wrong. It is telling them which version to switch to.
How to fix it: state the exact version clearly wherever players find your server. If you want to accept several versions at once, install ViaVersion (and ViaBackwards if older clients should get in too).
On Paper you can write your own message in spigot.yml under messages:
messages:
outdated-client: 'Your client is too old. This server runs {0}.'
outdated-server: 'Switch your launcher to {0} to join.'
Server log: nothing. Handshake-phase rejections are not logged. "The player says they get an error but my log is empty" is completely normal here.
Failed to log in: Invalid session
The full message is Failed to log in: Invalid session (Try restarting your game and the launcher).
Related variants:
Failed to log in: The authentication servers are currently not reachable. Please try again.
Failed to log in: Multiplayer is disabled. Please check your Microsoft account settings.
What it means: this error happens on the player's machine, before your server is contacted at all. Their client asked Microsoft for permission to join, and that answer never came.
Causes: an expired login token (the launcher has been open too long), an outage at Microsoft, the player running two instances of the game, or their system clock being wrong.
What you can do: almost always nothing - it is their account. Ask them to close both the game and the launcher completely and sign in again.
The only thing you can get wrong yourself is
online-mode. Set tofalse, this error cannot occur at all - but then no player is verified, and anyone can join under any name.
Server log: nothing.
You are not white-listed on this server!
Note that there are two spellings depending on your server software:
| Error message | Which server |
|---|---|
You are not white-listed on this server! |
Vanilla, Fabric, NeoForge - hyphenated |
You are not whitelisted on this server! |
Paper, Spigot, Purpur - no hyphen |
Causes:
white-list=trueand the player is not on the list- The player was added under an old username
- You edited
whitelist.jsonby hand without runningwhitelist reload enforce-whitelist=truekicks already-connected players when the list is reloaded
Never test with your own account. Operators always get in, whitelist or not. Use an ordinary account to test.
Server log: yes - Disconnecting <player> (/<ip>): You are not white-listed on this server!
The server is full! and Connection throttled!
Two very different things that get confused constantly.
The server is full! simply means max-players has been reached. Be aware that the real ceiling is usually your RAM, not the number in the file.
Connection throttled! Please wait before reconnecting. exists only on Paper and Spigot. The server refuses a new connection from the same IP address if less than 4 seconds have passed since the last attempt. The setting lives in bukkit.yml:
settings:
connection-throttle: 4000
The classic false alarm: everyone behind the same public IP shares one throttle window - a household, a school, or any server sitting behind a proxy. If you run Velocity or BungeeCord in front, the backend only ever sees the proxy's IP, so the throttle hits everyone. Set
connection-throttle: -1on the backend and let the proxy handle it instead.
Server log: The server is full! is logged. Connection throttled! is not - another case of "error for the player, empty console".
Took too long to log in
What it means: precisely that 600 server ticks passed - 30 seconds if the server is running normally - without login completing. If the server is running slowly, it takes correspondingly longer in real seconds.
Causes:
- The server was too busy to finish the login - typically still starting up, or a plugin blocking the main thread
- The server cannot reach Microsoft's login servers. A blocked outbound connection is a classic on tightly locked-down servers, and it only shows up when someone tries to log in
- The player's saved data is very large or corrupted
Server log: yes - Disconnecting <player>: Took too long to log in
Can't resolve hostname
The player gets this in the server list, before they even click Join. There is a related variant called Unknown host.
What it means: the address could not be looked up in DNS at all. This is not your server - it is the name.
Causes: a wrong or missing A record, an SRV record pointing at a raw IP address instead of a hostname, or DNS that has not propagated yet.
If you run without a port number via an SRV record, watch two things:
Players must type only the domain - if they add a port, the SRV lookup is skipped entirely and they hit port 25565.
And the port in your SRV record has to match
server-port. If it does not, players getConnection refusedwhile you test with IP and port and everything looks fine to you.
What does the server log - and what does it not?
This saves you hunting for something that is never written:
| Error for the player | Is anything in the console? |
|---|---|
Connection refused |
No - never arrived |
Connection timed out |
No |
Can't resolve hostname |
No |
Incompatible client! / Outdated server! |
No - handshakes are not logged |
Connection throttled! |
No |
Failed to log in: Invalid session |
No - happens on the player's machine |
You are not white-listed on this server! |
Yes |
The server is full! |
Yes |
You are banned from this server |
Yes |
Took too long to log in |
Yes |
ReadTimeoutException |
Usually - unless the server is frozen |
Connection reset |
Usually |
In short: nothing before login is logged, everything from login onwards is. If a player gets an error and your console is completely empty, it is almost always one of three things: the connection never arrived, the versions do not match, or they were throttled.
Good advice
- Leave
server-ipempty. There are very few good reasons to fill it in, and many bad ones. - State the exact Minecraft version where your players can see it. That removes an entire category of tickets.
- Test your address from outside occasionally - not from the same network as the server.
- Always ask the player for a screenshot of the whole error. The tail with the address and port is often the most important part.
- Do not set
max-tick-time=-1to escape crashes. You trade a clean restart for a server that hangs indefinitely - and that nobody can join.
Cannot place an error? Send us the message exactly as the player sees it, along with a section of the console from the same moment.