Skip to content

minecraft/dial.go: Close connection when dialing fails - #532

Open
EinBexiii wants to merge 1 commit into
Sandertv:masterfrom
EinBexiii:fix/dial-cancel
Open

EinBexiii wants to merge 1 commit into
Sandertv:masterfrom
EinBexiii:fix/dial-cancel

Conversation

@EinBexiii

Copy link
Copy Markdown

If the dial context gets cancelled while the handshake is still running, DialContextNetwork returns the error but never closes the conn. listenConn keeps going in the background, finishes the login on its own and then gets stuck sending on readyForLogin/connected since nobody's reading anymore. RakNet keeps the session alive, so the client stays on the server until the process exits.

Fix is pretty small: close the conn with closeTransport when dialing fails after newConn (same helper the listener uses for LoginTimeout, so it can't hang on a blocked flush), buffer the two handshake channels so listenConn can't block once the dial returned, and cancel the dial's child context.

Easy to reproduce by cancelling the context during the handshake. Before the fix the server side conn stays open, after it it gets closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant