diff --git a/network/netplay/netplay_frontend.c b/network/netplay/netplay_frontend.c index 6cfa790268..49026cb10f 100644 --- a/network/netplay/netplay_frontend.c +++ b/network/netplay/netplay_frontend.c @@ -57,6 +57,8 @@ static unsigned server_port_deferred = 0; static int reannounce = 0; static bool is_mitm = false; +bool netplay_disconnect(netplay_t *netplay); + /** * netplay_is_alive: * @netplay : pointer to netplay object @@ -825,6 +827,13 @@ bool netplay_pre_frame(netplay_t *netplay) sync_stalled = !netplay_sync_pre_frame(netplay); + /* If we're disconnected, deinitialize */ + if (!netplay->is_server && !netplay->connections[0].active) + { + netplay_disconnect(netplay); + return true; + } + if (sync_stalled || ((!netplay->is_server || netplay->connected_players) && (netplay->stall || netplay->remote_paused))) @@ -860,6 +869,10 @@ void netplay_post_frame(netplay_t *netplay) false)) netplay_hangup(netplay, connection); } + + /* If we're disconnected, deinitialize */ + if (!netplay->is_server && !netplay->connections[0].active) + netplay_disconnect(netplay); } /**