Sat, 29 Jan 2011

Of Ports and Bugs: To a Borderlands

Nothing but grief and pain, for promised joy


Getting the multiplayer part of Borderlands working can be a time-consuming and highly annoying process. Most information, regarding the ports being used by the game, is either incomplete, plain wrong or frightening, to say the least. (By which I mean all kind of forum posts that encourage people to open and forward every port known to men. Madness I say!) So here is the technical run down.

If anything following this paragraph looks like a foreign language to you, or you don’t know how to implement all of this with your software/hardware/network-configuration, don’t ask me, but your local geek.

Ports for OUTGOING connections:

  • TCP 29900 (GameSpy login)
  • TCP 28910 (GameSpy game browser)
  • TCP 27900-27901 (GameSpy again)
  • UDP 6500
  • UDP 7777
  • UDP 9989

I for one restricted the TCP connections to 69.10.30.0/24, which is a subset of the GameSpy servers being used.

If you want to host a game (and only then!) you need to open the following INCOMING ports and forward them accordingly.

  • UDP 6500 (GameSpy query port)
  • UDP 7777 (game data)
  • UDP 9989 (something else…)

The LAN broadcast port is UDP 14001. So if you want to play LAN games you need to open that port too.

The game also attempts to connect to a GameSpy server via TCP ports 80 and 443 (HTTP and HTTPS) but it doesn’t matter if you refuse those connections.

All in all, this is quite a different list to the official one in the Borderland ReadMe-file or 2K Game’s support page.

Also there is a bug when it comes to hosting private games: To start a private game, the host needs to open a public game first and invite all other players. As soon as everyone has joined the lobby close the public game and host a private game. Invite all your friends again and off you go. (If you don’t do that, no one will be able to connect and they will time-out)

And one more thing: (gee…) Borderlands, by default, uses a rather small value for timing-out clients. Only 30 seconds. So if you have a player with an older computer and longer loading times, you’ve got a problem. But I wouldn’t write this, if there were no solution, would I? In the game’s engine-configuration file (My Documents\My Games\Borderlands\WillowGame\Config\WillowEngine.ini) is a section called [IpDrv.TcpNetDriver], which should look something like this:

[IpDrv.TcpNetDriver]
AllowDownloads=True
ConnectionTimeout=30.0
InitialConnectTimeout=150.0
AckTimeout=1.0

Just increase the ConnectionTimeout value to 60.0 or something (I use 90.0 because ..uh.. I can!) and you are good to go. This has to be done on the host’s machine only, of course.

How did I come up with the list of ports? By using a firewall that actually logs stuff and netstat (well, more like a Perl script that constantly polls GetExtendedTcpTable() and GetExtendedUdpTable() via Win32::IPHelper to display every port that changes its state).

And to wrap things up, one of the best moments in my first Borderlands playthrough: Finding a shotgun named “Boom Stick”. There can never be enough Army of Darkness-references.


Enable Javascript to see comments