x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

Questions about LogNet and LogNetTraffic Warnings and Errors

Build: 4.5.1 Source (SHA: ad428a) - I've noticed these warnings since 4.3/4.4

I would like to know how to prevent disconnects associated with various LogNet and LogNetTraffic errors and warnings. I decided to include all of the errors and warnings I've come across while simulating a high latency environment because I suspect they're all somewhat related. I feel like there are some safeguards I should be using in my code that I'm not. I have been carefully reading the UT codebase and haven't found much difference between my own, but it's entirely possible I'm missing things.

Warning and Error messages

I typically don't see these messages in PIE/dedicated with no latency simulation or low latency simulation. They tend to appear when I increase ping and packet loss likelihood (I'm using clumsy to simulate latency: http://jagt.github.io/clumsy/index.html).

Here are the various messages I've encountered:

  • "Received bunch before connected"

  • "Received non-control bunch during login"

  • "History overflow forcing history dump"

  • "Received unreliable bunch before open"

The "Received bunch before connected" message seems to be associated with the connection being closed. I'm not sure why this happens but my initial reaction was to make early Actor RPCs (eg, called in BeginPlay) unreliable, especially multicasts, as they could potentially be called on a connection that wasn't ready(?). This is conjecture on my part, I haven't dug into the code behind these messages enough to understand their causes.

What I'm doing

I noticed in the UT codebase that the UTPlayerController will check IsLocalPlayerController() before dispatching input to its UTCharacter. I applied the same pattern in my codebase, so now the KalimpongPlayerController checks IsLocalPlayerController() before doing something like MyPawn->AimRight(), etc. I also noticed that the UTCharacter will check IsLocallyControlled() before applying the input. I'm now doing the same in my codebase; e.g., in ::ReleaseProjectile() my pawn checks IsLocallyControlled() before issuing the release call to its attached projectile launcher.

I'm sending as few RPCs as I can get away with and as infrequently as possible. The biggest payload I send over the wire is two FVector_NetQuantize100 arguments and an Enum. I don't recall issuing any RPCs as a result of Tick() on any actor. Almost all of my RPCs are reliable. I have a few NetMulticast RPCs that are reliable that mostly deal with pawn destruction.

What I would like to know

  • What are the best practices around sending RPCs? Should more of mine be unreliable? They seem to warrant reliability.

  • Should I avoid reliable NetMulticast RPCs?

  • Should an RPC always be scheduled with a Timer or a Delay? Similarly, is it okay to call RPCs as a direct result of player input? I noticed that the UTCharacter uses a struct for deferring the StartFire/StopFire events instead of just immediately telling the Server, and the Tick() function handles applying the input (I think I recalled that correctly but I don't have the code handy at the moment).

  • What do these warnings and errors mean and how can I guard against them? I want to ensure players won't get kicked immediately upon joining a server, or have their connection closed abruptly during the game, but I'm not sure which techniques to avoid and which to apply.

I'm happy to provide code if more detail is needed. Thanks for taking a look!

Product Version: Not Selected
Tags:
more ▼

asked Nov 19 '14 at 07:43 PM in C++ Programming

avatar image

piinecone
537 22 32 369

avatar image dave_sullivan Nov 10 '16 at 03:59 AM

Hey, were you ever able to get answers to any of these questions? I'm finding myself dealing with the same ambiguities... In particular I've gotten the "history overflow forcing history dump" (which seems mostly to be fixed with lower latency server), and more recently "received invalid swap message with child index", I have no idea what that one means.

(comments are locked)
10|2000 characters needed characters left

0 answers: sort voted first
Be the first one to answer this question
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question