Network.TestConnection Manual     Reference     Scripting  
Scripting > Runtime Classes > Network
Network.TestConnection

static function TestConnection (forceTest : bool = false) : ConnectionTesterStatus

Description

Test this machines network connection.

Two types of tests are performed depending on if the machine has a public IP address present or if it only has a private address (or addresses).

The public IP address test is primarily for when running a server as no tests are needed for clients with public addresses. In order for the public IP test to succeed a server instance must be started. A test server will try to connect to the IP and port of the local server and thus it is shown in the server is connectable. If not then a firewall is most likely blocking the server port. A server instance needs to be running so that the test server has something to connect to.

The other test is for checking NAT punchthrough capabilities. This is a valid test for both servers and clients and can be performed without any prior setup. If the NAT test fails for a server then it is a bad idea to proceed without setting up port forwarding as no client outside the local LAN network will be able to connect. If the test fails for a client then it cannot connect to servers with NAT addresses, those kinds of servers should then not be be presented to the user as possible game hosts.

This function is asynchronous and might not return a valid result right away because the tests needs some time to complete (1-2 seconds). After test completion the test result is only returned when the function is called again, a full network test is not redone. That way it is safe to poll the function frequently. If another test is desired, like if the network connection has been altered, then the forceTest parameter should be passed as true.

The function returns a ConnectionTesterStatus enum.

// Should we hide NAT hosts in the host list?
private var filterNATHosts = false;
private var doneProbingPublicIP = false;
function OnGUI ()
{
// Start/Poll the connection test,
// report the results in a label and react to the results accordingly
natCapable = Network.TestConnection();
if (natCapable == -2)
GUILayout.Label("Problem determining NAT capabilities");
else if (natCapable == -1)
GUILayout.Label("Undetermined NAT capabilities");
else if (natCapable == 0)
{
GUILayout.Label("Cannot do NAT punchthrough, " +
"filtering NAT enabled hosts for client connections, " +
"impossible to run a server.");
filterNATHosts = true;
Network.useNat = false;
}
else if (natCapable == 1)
{
if (doneProbingPublicIP)
GUILayout.Label("Non-connectable public IP address (port "+
serverPort +
" blocked), NAT punchthrough can circumvent the firewall.");
else
GUILayout.Label("NAT punchthrough capable. " +
"Enabling NAT punchthrough functionality.");
// NAT functionality is enabled in case a server is started,
// clients enable this based on if the host requires it
Network.useNat = true;
}
else if (natCapable == 2)
{
GUILayout.Label("Directly connectable public IP address.");
Network.useNat = false;
}
else if (natCapable == 3)
{
GUILayout.Label("Non-connectble public IP address (port " +
serverPort +" blocked), running a server is impossible.");
Network.useNat = false;
if (!doneProbingPublicIP)
{
natCapable = Network.TestConnectionNAT();
doneProbingPublicIP = true;
}
}
else if (natCapable == 4)
{
GUILayout.Label("Public IP address but server not initialized, "+
"it must be started to check server accessibility.");
Network.useNat = false;
}
if (GUILayout.Button ("Retest connection"))
{
Debug.Log("Redoing connection test");
doneProbingPublicIP = false;
natCapable = Network.TestConnection(true);
}
}