Skip to content

[FN 3.5.8] No port other than 7770 is working in headless built game on linux #314

@tedbarth

Description

@tedbarth

Unity version: 2021 LTS and 2022 something
Fish-Networking version: 3.5.8 (version increased)

Describe the bug
When building headless server, the client cannot connect to ports other than 7770, at least on linux.

To Reproduce
Steps to reproduce the behavior:

  1. Add NetworkController MonoBehaviour attached to this issue
  2. Set ServerManager's StartOnHeadless to false
  3. Build a headless dedicated server using Unity Editor
  4. Build a normal client using Unity Editor
  5. Start server from Command line via game.x86_64 --server --port 7770 --serverBindAddressIpv4 127.0.0.1
  6. Start client from Command line via game.x86_64 --client --port 7770 --clientAddress 127.0.0.1
  7. Client can connect
  8. Kill both, server and client
  9. Start server from Command line via game.x86_64 --server --port 7771 --serverBindAddressIpv4 127.0.0.1
  10. Start client from Command line via game.x86_64 --client --port 7771 --clientAddress 127.0.0.1
  11. Client can't connect

Expected behavior
The client can connect to the server no matter what port is used and if headless mode.

Code

using System;
using FishNet;
using FishNet.Transporting;
using FishNet.Transporting.Tugboat;
using UnityEngine;

namespace Networking {
  public class NetworkController : MonoBehaviour {
    private void Awake() {
      var tugboat = InstanceFinder.NetworkManager.gameObject.GetComponent<Tugboat>();

      bool startServer = false;
      bool startClient = false;
      ushort port = tugboat.GetPort();
      string clientAddress = tugboat.GetClientAddress();
      string serverBindAddressIpv4 = tugboat.GetServerBindAddress(IPAddressType.IPv4);
      string serverBindAddressIpv6 = tugboat.GetServerBindAddress(IPAddressType.IPv6);

      Debug.Log("Parsing commandline arguments...");
      string[] args = Environment.GetCommandLineArgs();
      for (int i = 0; i < args.Length; i++) {
        var argument = args[i];
        switch (argument) {
          case "--server":
            startServer = true;
            break;
          case "--client":
            startClient = true;
            break;
          case "--clientAddress":
            clientAddress = args[++i];
            break;
          case "--serverBindAddressIpv4":
            serverBindAddressIpv4 = args[++i];
            break;
          case "--serverBindAddressIpv6":
            serverBindAddressIpv6 = args[++i];
            break;
          case "--port":
            port = ushort.Parse(args[++i]);
            break;
        }
      }

      Debug.Log(
        $"Parsing commandline arguments ended:\n"
        + $"Start server: {startServer}\n"
        + $"Start client: {startClient}\n"
        + $"Client address: {clientAddress}\n"
        + $"Server bind address IPv4: {serverBindAddressIpv4}\n"
        + $"Server bind address IPv6: {serverBindAddressIpv6}\n"
        + $"Port: {port}");

      tugboat.SetServerBindAddress(serverBindAddressIpv4, IPAddressType.IPv4);
      tugboat.SetServerBindAddress(serverBindAddressIpv6, IPAddressType.IPv6);
      tugboat.SetClientAddress(clientAddress);
      tugboat.SetPort(port);

      if (startServer) {
        StartServer();
      }

      if (startClient) {
        StartClient();
      }
    }

    private static void StartClient() {
      Debug.Log("Starting Client...");
      InstanceFinder.ClientManager.StartConnection();
    }

    private static void StartServer() {
      Debug.Log("Starting Server...");
      InstanceFinder.ServerManager.StartConnection();
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions