Show Sidebar

In Depth - Zeus (Master Server)

From version and up Bolt has its own master server, here's a breakdown of how to use it.

Using the Development Zeus server

We provide a development master server for use while you are testing and building your game, so there is no need to go through the process of hosting one yourself.

The IP address and port to the development master server is This is also the default IP address filled into the 'Master Server' configuration settings in the 'Bolt Settings' window.

Running Your Own Zeus server

The binary release of Zeus is located in the downloads section on our site.

NOTE: At the time being it's not possible to run Zeus on the same computer as the server or any of the clients. This problem will be resolved in a future release.


  • A Server somewhere, running either Linux or Windows.
  • For optimal operation you need 4 unique WAN IP addresses for this server.
  • You need to be able to bind a socket on the server to each of the 4 WAN IP addresses you are going to be using, this means the server can't be behind a NAT. Also, as far as we know, this rules out Microsoft Azure VMs, as you cannot bind to the public IP on the VM.
  • For Linux you need Mono 3.12 installed
  • For Windows you need .NET 4.5 installed

Configuration file

Above is a sample configuration file, the 4 IP addresses are to be filled into the Ip, Ip0, Ip1 and Ip2 attributes. GameId should match the GameId field in your 'Bolt Settings' window. Timeout controls after how many milliseconds of inactivity a host and client should time out. If you do not have 4 WAN IP addresses, you can set the subsequent IPs to the same IP as the master.

There's few more things to say about the 'GameId', you can have several ones specified at once:

You can also have no game ids specified at at all, this means that the server will accept any GameId (and this is how the development server is setup).

There is a default Config.xml file located next to the zeus.exe file in the binary package, you can simply edit this one.

Starting the server

On Windows all you need to do is to double-click on the zeus.exe file while logged in over remote desktop to your server.

On GNU/Linux, you execute the command mono zeus.exe from a SSH client.

To make sure the server stays running after you close your SSH session we recommend to use something like screen which can be installed using your distributions package manager, see GNU Screen at Wikipedia for more info.

Connecting to Zeus

You can either setup Bolt to automatically connect to the master server or do it by hand. For connecting automatically when a client/server starts open up the 'Bolt Settings' window and fill out the 'Endpoint' and 'Connect' settings as in the picture below. The default endpoint is the development Zeus server we provide.

If you instead want to connect manually to a Zeus server, you simply call Bolt.Zeus.Connect(UdpEndPoint endpoint) and pass in the endpoint of the server you wish to connect to.

Disconnecting from Zeus

Call Bolt.Zeus.Disconnect().

Registering your server as a session

By calling BoltNetwork.SetHostInfo and pass in the name of your server and (optionally) an IProtocolToken you will get your server to appear on the session list of the zeus server.

Update the session list

To update the list of sessions available on the server call Bolt.Zeus.RequestSessionList(). The session list can be found at the BoltNetwork.SessionList property.

Connecting to a session

To connect to a session from the BoltNetwork.SessionList you call the following method: BoltNetwork.Connect(UdpSession session) or the overload which takes an IProtocolToken BoltNetwork.Connect(UdpKit.UdpSession session, Bolt.IProtocolToken token).

What global callbacks are available?

public void override ZeusConnected(UdpKit.EndPoint endpoint) - Invoked when we are connected to a zeus server.

public void override ZeusConnectFailed(UdpKit.EndPoint endpoint) - Invoked if we failed to connect to a zeus server.

public void override ZeusDisconnected(UdpKit.EndPoint endpoint) - Invoked when we are disconnected from a zeus server.

public void override ZeusNatProbeResult(UdpKit.NatFeatures features) - Invoke before the Connected callback and gives you information about the features of the NAT you are behind currently.

public void override SessionListUpdated(Map<System.Guid, UdpSession> sessionList) - Invoked when the session list is updated.

public void override SessionConnectFailed(UdpSession session) - Invoked when we failed to connect to a session.


While the Zeus is running I occasionally see an System.TimeoutException thrown.

This is actually not an error, this just means that a client or host has timed out from the master server and is being removed. The reason it's showing up is because we're logging all exceptions, even the ones that are handled by the master server.

 To Document Top