From 5f681d0b0f28cd39bc033c0cdf8eb3cb3a4acbe6 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Wed, 8 Mar 2017 17:14:01 +0100 Subject: Allow non blocking UDP put_packet in C++. - Add blocking mode option to PacketPeerUDP. - put_packet returns ERR_UNAVAILABLE when operation would block. - ENet module uses non-blocking UDP. --- thirdparty/enet/godot.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'thirdparty/enet') diff --git a/thirdparty/enet/godot.cpp b/thirdparty/enet/godot.cpp index 0f707274ee..18ccc02c50 100644 --- a/thirdparty/enet/godot.cpp +++ b/thirdparty/enet/godot.cpp @@ -79,7 +79,10 @@ int enet_socket_bind(ENetSocket socket, const ENetAddress *address) { ENetSocket enet_socket_create(ENetSocketType type) { - return PacketPeerUDP::create(); + PacketPeerUDP *socket = PacketPeerUDP::create(); + socket->set_blocking_mode(false); + + return socket; } void enet_socket_destroy(ENetSocket socket) { @@ -118,6 +121,11 @@ int enet_socket_send(ENetSocket socket, const ENetAddress *address, const ENetBu err = sock->put_packet((const uint8_t *)&w[0], size); if (err != OK) { + + if (err == ERR_UNAVAILABLE) { // blocking call + return 0; + } + WARN_PRINT("Sending failed!"); return -1; } -- cgit v1.2.3