FAILED TO BIND TO PORT! What it means, and the fix

Updated 29 Sep 2026 · 3 min read

The short answer

A server that can't listen on its port logs FAILED TO BIND TO PORT! and stops. The line after it says why: Address already in use means another program has the port, Cannot assign requested address means server-ip names an address the machine doesn't have, and Permission denied means a port under 1024 without root.

1The line that matters

Minecraft 1.21.1's log, on Linux

Starting Minecraft server on *:25577 **** FAILED TO BIND TO PORT! The exception was: io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use Perhaps a server is already running on that port?

The server tried to take its port, couldn't, and stopped. Read the line that starts with "The exception was": it names the reason. The last line is printed whatever the reason, so it can be wrong.

2Three reasons, from our tests

On 29 Sep we started Minecraft 1.21.1's own server jar on Linux, as a normal user, three ways:

What was wrongThe exception, on LinuxOn Windows, Java 21
Another program already listened on the portbind(..) failed: Address already in usejava.net.BindException: Address already in use: bind
server-ip=203.0.113.10, an address the machine doesn't havebind(..) failed: Cannot assign requested addressjava.net.BindException: Cannot assign requested address: bind
server-port=80, as a user that isn't rootbind(..) failed: Permission deniedDoesn't apply

Linux servers use Netty's own network code, hence NativeIoException. With use-native-transport=false, Java's standard networking, which Windows and macOS always use, the first case read java.net.BindException: Address already in use, and Windows adds : bind.

3The fix for each

  • Address already in use: find what has the port. Often it's the same server started twice, an old copy still running in another window or session. On Linux, sudo ss -ltnp 'sport = :25565' names the program; on Windows, netstat -ano | findstr :25565 gives its process ID. Stop it, or give your server another port with server-port, like 25566.
  • Cannot assign requested address: empty server-ip. With it empty the server listens on every address the machine has, which is what you want almost always.
  • Permission denied: use a port from 1024 up. Linux keeps the ports below 1024 for root. Use 25565 and put a DNS SRV record in front, if you want an address without a port.
  • Inside one server, two things on one port: an RCON port or a plugin's own port set to the game's port clashes with it. Query can share it: ours ran with query.port on the game's port, since query uses UDP and the game TCP.

What ss showed while our test port was taken

State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 1 127.0.0.1:25577 0.0.0.0:* users:(("nc",pid=4321,fd=5))

4On a Playkeeper server

  • Each server gets its own port, 25565 for the first and one more from 25566 for each further server, so two of yours never ask for the same one.
  • When another program has a server's port, the Overview says Port 25565 is already in use, with a button to give the server a different port.
  • When it happens inside the server, it explains the cause: a plugin, a mod or RCON set to the game's port, or a server-ip the machine doesn't have.

Questions

What does FAILED TO BIND TO PORT mean?

The server couldn't take its port, so it stopped. The line after it says why: another program has the port, server-ip names an address the machine doesn't have, or the port is under 1024 without root.

Is a server already running on that port?

Only if the exception says Address already in use; the log suggests it whatever the reason. Check with ss on Linux or netstat on Windows.

What should server-ip be?

Empty. The server then listens on every address the machine has.

A port for every server, given out for you.

Free and open source. Playkeeper gives each server its own port and says what's in the way.

curl -fsSL https://playkeeper.io/install | sudo sh
Try the live demo