Skip to content

Uncleanly disconnected ENetPacketPeers don't contain remote peer address/port in the disconnect event #107864

Open
@Calandiel

Description

@Calandiel

Tested versions

Reproducible in Godot v4.4.stable

System information

Godot v4.4.stable - Fedora Linux 42 (Workstation Edition) on Wayland - X11 display driver, Multi-window, 1 monitor - Vulkan (Forward+) - dedicated NVIDIA GeForce RTX 3060 Laptop GPU (NVK GA106) - 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz (12 threads)

Issue description

When using ENetConnection for networking, if a client isn't disconnected cleanly (for example when the process hosting it suddenly dies) a server will have the disconnect event raised but the related ENetPacketPeer will NOT have the remote address and port).

This makes it impossible to tell which client timed out when there are multiple players. I believe this is different from the behavior of ENet itself.

Steps to reproduce

  • Run the attached project twice either from console or from the godot editor.
  • In the first instance, click on "server" and wait for a line of text about creating the server to print .
  • In the second instance, click on "client" and wait for a line of text about creating the client to print .
  • Kill the second instance (client) either by killing the process or pressing the close button in the corner of the window frame
  • Wait for the first instance (server) to have a disconnect event for the client raised due to a timeout
  • The server will attempt to get the remote address and port for the disconnected peer, this will result in an error

Minimal reproduction project (MRP)

enet_repro.zip

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    For team assessment

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions