Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.

Resolved Inconsistent Connection Issue: Client Fails to Connect to Unity Host with Relay

Discussion in 'Unity Transport' started by rahulchawla2801, May 25, 2023.

  1. rahulchawla2801

    rahulchawla2801

    Joined:
    Oct 5, 2021
    Posts:
    26
    I am encountering a strange issue where my Unity Network Manager client and host are starting properly, and a relay is created. However, the client is unable to connect consistently. I have logged the RelayServerData on both the client and server, and they have the same Endpoint and IsSecure values. I am running the host on Unity Editor on Mac and the client on an Android device, Meta Quest 2.

    Here are some additional details:
    • All packages are up to date.
    • On the host side, I am setting the RelayServerData using the following code:
    Code (CSharp):
    1. NetworkManager.Singleton.GetComponent<UnityTransport>().SetRelayServerData(new RelayServerData(allocation, "dtls"));
    • On the client side, I am setting the RelayServerData using the following code:
    Code (CSharp):
    1. NetworkManager.Singleton.GetComponent<UnityTransport>().SetRelayServerData(new RelayServerData(joinAllocation, "dtls"));

    Despite the similarities in configuration, the client fails to connect to the server most of the time, resulting in a "failed to connect to server" error. However, it successfully connects around 20% of the time, which adds to the confusion.

    I would appreciate any insights or suggestions to help resolve this issue.
     
  2. simon-lemay-unity

    simon-lemay-unity

    Unity Technologies

    Joined:
    Jul 19, 2021
    Posts:
    276
    How much time elapses between the allocation being created, and host/client being started? Allocations on which there is no activity for a few seconds will automatically timeout, so I'd recommend only creating the allocations once you're about to start the host/client (once started they'll keep the allocation alive on their own). Also related to that: what's the value of the heartbeat timeout setting of the Unity Transport component?

    Otherwise, do you get the same behavior if connecting with UDP instead of DTLS? You can test that by changing the "dtls" string to "udp".
     
    rahulchawla2801 likes this.
  3. rahulchawla2801

    rahulchawla2801

    Joined:
    Oct 5, 2021
    Posts:
    26

    So it is working fine with UDP.

    With DTLS, I do everything immediately in this order.
    Create Allocation on the host -> immediately start the host.
    Immediately switch device -> then join allocation and start the client.

    Heartbeat Timeout MS = 500
    Connection Timeout MS = 1000

    On a side note,
    I was earlier getting an error on client, 30% times, while joining the allocation.
    “Join Relay Error Unity.Services.Relay.RelayServiceException: Not Found: join code not found ---> Unity.Services.Relay.Http.HttpException`1[Unity.Services.Relay.Models.ErrorResponseBody]: (404) HTTP/1.1 404 Not Found“

    Despite, the relay code and the code length being the same on the host and client.

    I temporarily fixed it by changing the Heartbeat Timeout from 500 to 5000.
     
  4. simon-lemay-unity

    simon-lemay-unity

    Unity Technologies

    Joined:
    Jul 19, 2021
    Posts:
    276
    Strange that increasing the heartbeat timeout would resolve the 404 error. This would normally lead to less frequent heartbeats and thus a higher probability of an allocation timeout.

    What editor version are you using? Also, what's the version of the Unity Transport package?
     
  5. rahulchawla2801

    rahulchawla2801

    Joined:
    Oct 5, 2021
    Posts:
    26

    Exactly, that’s why I kept it back at 500.

    Unity editor 2022.2.19f1
    NGO 1.4.0
    Unity transport 1.3.4
    Relay 1.0.5
     
    Last edited: May 25, 2023
  6. simon-lemay-unity

    simon-lemay-unity

    Unity Technologies

    Joined:
    Jul 19, 2021
    Posts:
    276
    Since you're on 2022.2, you may want to try updating Unity Transport to 2.0.1. You can specify the version when installing by name (or just modify the package manifest directly). There were a lot of changes and improvements in how we handle DTLS and Relay so that might help.
     
    rahulchawla2801 likes this.
  7. rahulchawla2801

    rahulchawla2801

    Joined:
    Oct 5, 2021
    Posts:
    26

    So I updated to 2.0.1

    I am not getting the earlier errors, “Not Found: join code not found” and "failed to connect to server"

    But sometimes, whenever I run the host on Android (Quest 2), as soon as the client on Unity editor connects to the host, the app on the host crashes without any logs. I will have to check it. I am getting so many random and non-consistent errors with Relay and Unity Transport. Idk

    Thanks for the help, Simon!
     
  8. simon-lemay-unity

    simon-lemay-unity

    Unity Technologies

    Joined:
    Jul 19, 2021
    Posts:
    276
    If you can get logs for the crash (here's how to find them), that's something I'd definitely be interested in having a look at. There was also a report recently of someone encountering errors due to Burst that were fixed by updating to 2022.2.21. Might be worth a try if you're able to update.
     
    rahulchawla2801 likes this.
  9. rahulchawla2801

    rahulchawla2801

    Joined:
    Oct 5, 2021
    Posts:
    26
    So as far as the Android logs are concerned, there were no non-conforming logs, just regular Debug logs.

    I can share my macOS from ~/Library/Logs/Unity/…
    Let me know if you are interested in anything specific.

    I’ll update to 2022.2.21 right away.
     
  10. rahulchawla2801

    rahulchawla2801

    Joined:
    Oct 5, 2021
    Posts:
    26
    It is working perfectly fine with 2022.2.21 and Unity Transport 2.0.1
     
    simon-lemay-unity likes this.