Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue
InitializeSteamDirectory()
returns the list of Steam servers, but some of them are bad and hang until the OS decides to close the connection. This causes issues when using theclient.Connect()
method that decides to pick up a "bad" server:This also causes the client to call
Fatalf()
method and emit Fatal event:Not sure why, but upon calling the
client.Connect()
the next time, it either hangs forever, or manages to connect to a new server (unless it picks up a bad server again), but then panics when trying to login (client.Auth.LogOn()
).This is probably the func that panics with negative index slice slicing (something like s[:-221]):
Proposal
Proposed addition is to add Context aware functions which would let users pass the context with timeout on dial.
It is up to the user on how to handle the
context.Canceled
orcontext.DeadlineExceeded
error.ConnectToBindContext()
would also not emitFatalf()
event error on context cancellation:Context aware functions are tested in the newly added
client_test.go
.Note
One minor thing to note is that the implementation would use a workaround on
net.DialTCP()
becausenet.DialTCPContext()
is accepted, but awaiting implementation in Go (https://go-review.googlesource.com/c/go/+/490975). The only thing this does is that we leave the coroutine waiting for the dial to connect, but the connection, whether connected or not after context times out, is discarded.