@@ -65,6 +65,9 @@ namespace pg
6565
6666 auto newSock = SDLNet_TCP_Accept (_listener);
6767
68+ if (not newSock)
69+ return nullptr ;
70+
6871 bool addedToSet = false ;
6972
7073 for (size_t setId = 0 ; setId < sockSets.size (); setId++)
@@ -132,12 +135,38 @@ namespace pg
132135 return _isConnectedToServer;
133136 }
134137
138+ void SdlNetworkBackend::disconnectFromServer ()
139+ {
140+ if (_tcpSock)
141+ {
142+ SDLNet_TCP_DelSocket (sockSet, _tcpSock);
143+ SDLNet_TCP_Close (_tcpSock);
144+ _tcpSock = nullptr ;
145+ }
146+
147+ if (_udpSock)
148+ {
149+ SDLNet_UDP_Close (_udpSock);
150+ _udpSock = nullptr ;
151+ }
152+
153+ _isConnectedToServer = false ;
154+ }
155+
135156 void SdlNetworkBackend::closeTcp (SocketHandle sock)
136157 {
137158 if (sock)
138159 {
139- SDLNet_TCP_DelSocket (sockSet, static_cast <TCPsocket>(sock));
140- SDLNet_TCP_Close (static_cast <TCPsocket>(sock));
160+ auto tcpSock = static_cast <TCPsocket>(sock);
161+
162+ auto it = sockSetsMap.find (tcpSock);
163+ if (it != sockSetsMap.end ())
164+ {
165+ SDLNet_TCP_DelSocket (it->second , tcpSock);
166+ sockSetsMap.erase (it);
167+ }
168+
169+ SDLNet_TCP_Close (tcpSock);
141170 }
142171 }
143172
@@ -231,7 +260,7 @@ namespace pg
231260 }
232261 else
233262 {
234- _isConnectedToServer = false ;
263+ disconnectFromServer () ;
235264 LOG_ERROR (DOM, " TCP receive failed, disconnected from server !" );
236265 }
237266 }
@@ -318,7 +347,7 @@ namespace pg
318347 }
319348 else
320349 {
321- _isConnectedToServer = false ;
350+ disconnectFromServer () ;
322351 socketClosed = true ;
323352
324353 LOG_ERROR (DOM, " TCP receive failed, disconnected from server !" );
0 commit comments