After a client joins when is it safe for a client to send an RPC to the server?

I implemented these solutions and thought it was all working, but this problem showed up again today. Pulling my hair out now!

My current setup is:
[Server] OnPostLogin. When client has joined, send a RPC from server->client telling that client “isServerReady”.
[Client] Player Pawn OnBeginPlay, delay 1s, then check “isServerReady”. If true send an RPC from client->server with initial data to be applied. If false, delay 1s and check again (looping until it finally works).

Client receives the 'isServerReady" rpc just fine, and IS TRYING to send the RPC back to the server but THIS RPC NEVER ARRIVES. Logs don’t show anything at all, no “no valid connection” or any error.

I checked that the pawn is owned by the local controller. But also tried to just route this event through the locally controlled player controller, same issue.

Does the event need to be set to reliable?
Is there some other condition I need to wait for “before it’s safe”?
Is there any way to further confirm with logs if the RPC is being sent, or being received but just… wrong? I have a log string before and after the client calls the “Send RPC” which are being logged so the code is being reached. Just nothing on the server.

I noticed if I add a delay 5s in the PostLogin function to delay telling the client “isServerReady” things work. But I am not sure it works in all net conditions so I don’t want to rely on random delays.

I’m at my wits end and any advice would be greatly appreciated! :slight_smile:
Really would like a proper solution instead of just adding more delays and hoping it works in all cases!

Edit: Marking these RPCs as reliable seems to make things work? So I wonder if the network (during startup) just is too full, and those first RPCs (which were not marked as reliable) are being dropped? Hmmm