From 7de28be76479796691730dcdc8c121543c5c9681 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Fri, 31 Aug 2018 03:22:41 +0200 Subject: [PATCH] ENet wrapper properly detect disconnect on poll Now PacketPeerUDP.get_available_packet_count() return -1 if the socket is in error state. --- drivers/unix/packet_peer_udp_posix.cpp | 2 +- drivers/windows/packet_peer_udp_winsock.cpp | 2 +- thirdparty/enet/godot.cpp | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/unix/packet_peer_udp_posix.cpp b/drivers/unix/packet_peer_udp_posix.cpp index 1cb530420ea..1c5456917be 100644 --- a/drivers/unix/packet_peer_udp_posix.cpp +++ b/drivers/unix/packet_peer_udp_posix.cpp @@ -61,7 +61,7 @@ int PacketPeerUDPPosix::get_available_packet_count() const { Error err = const_cast(this)->_poll(false); if (err != OK) - return 0; + return -1; return queue_count; } diff --git a/drivers/windows/packet_peer_udp_winsock.cpp b/drivers/windows/packet_peer_udp_winsock.cpp index f7c3637e7e0..62a23bdf3f2 100644 --- a/drivers/windows/packet_peer_udp_winsock.cpp +++ b/drivers/windows/packet_peer_udp_winsock.cpp @@ -42,7 +42,7 @@ int PacketPeerUDPWinsock::get_available_packet_count() const { Error err = const_cast(this)->_poll(false); if (err != OK) - return 0; + return -1; return queue_count; } diff --git a/thirdparty/enet/godot.cpp b/thirdparty/enet/godot.cpp index 7813b70286d..177848f96b6 100644 --- a/thirdparty/enet/godot.cpp +++ b/thirdparty/enet/godot.cpp @@ -168,8 +168,9 @@ int enet_socket_receive(ENetSocket socket, ENetAddress *address, ENetBuffer *buf PacketPeerUDP *sock = (PacketPeerUDP *)socket; - if (sock->get_available_packet_count() == 0) { - return 0; + int pc = sock->get_available_packet_count(); + if (pc < 1) { + return pc; } const uint8_t *buffer;