[ENet] Better handle disconnected peers in DTLS server
The ENetDTLSServer socket implementation should avoid reporting errors during send and receive operations, unless the socket is effectively no longer usable (and thus ENet should close it).
This commit is contained in:
parent
3978628c6c
commit
764b7abe82
15
thirdparty/enet/godot.cpp
vendored
15
thirdparty/enet/godot.cpp
vendored
@ -299,7 +299,12 @@ public:
|
||||
|
||||
Error sendto(const uint8_t *p_buffer, int p_len, int &r_sent, IPAddress p_ip, uint16_t p_port) {
|
||||
String key = String(p_ip) + ":" + itos(p_port);
|
||||
ERR_FAIL_COND_V(!peers.has(key), ERR_UNAVAILABLE);
|
||||
if (unlikely(!peers.has(key))) {
|
||||
// The peer might have been disconnected due to a DTLS error.
|
||||
// We need to wait for it to time out, just mark the packet as sent.
|
||||
r_sent = p_len;
|
||||
return OK;
|
||||
}
|
||||
Ref<PacketPeerDTLS> peer = peers[key];
|
||||
Error err = peer->put_packet(p_buffer, p_len);
|
||||
if (err == OK) {
|
||||
@ -307,7 +312,10 @@ public:
|
||||
} else if (err == ERR_BUSY) {
|
||||
r_sent = 0;
|
||||
} else {
|
||||
r_sent = -1;
|
||||
// The peer might have been disconnected due to a DTLS error.
|
||||
// We need to wait for it to time out, just mark the packet as sent.
|
||||
r_sent = p_len;
|
||||
return OK;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
@ -349,7 +357,8 @@ public:
|
||||
if (err != OK || p_len < r_read) {
|
||||
// Something wrong with this peer, removing it.
|
||||
remove.push_back(E.key);
|
||||
err = FAILED;
|
||||
err = ERR_BUSY;
|
||||
r_read = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user