[Orxonox-commit 3130] r7824 - code/branches/network6/src/libraries/network

scheusso at orxonox.net scheusso at orxonox.net
Tue Dec 28 19:11:32 CET 2010


Author: scheusso
Date: 2010-12-28 19:11:32 +0100 (Tue, 28 Dec 2010)
New Revision: 7824

Modified:
   code/branches/network6/src/libraries/network/Connection.cc
Log:
this should prevent disconnecting clients from crashing our servers ;)


Modified: code/branches/network6/src/libraries/network/Connection.cc
===================================================================
--- code/branches/network6/src/libraries/network/Connection.cc	2010-12-28 15:46:42 UTC (rev 7823)
+++ code/branches/network6/src/libraries/network/Connection.cc	2010-12-28 18:11:32 UTC (rev 7824)
@@ -182,14 +182,30 @@
     switch( event.type )
     {
       case outgoingEventType::sendPacket:
-        assert(this->peerMap_.find(event.peerID) != this->peerMap_.end());
-        peer = this->peerMap_[event.peerID];
-        enet_peer_send( peer, event.channelID, event.packet );
+        // check whether the peer is still/already in the peer list
+        if( this->peerMap_.find(event.peerID) != this->peerMap_.end() )
+        {
+          peer = this->peerMap_[event.peerID];
+          enet_peer_send( peer, event.channelID, event.packet );
+        }
+        else
+        {
+          // peer probably already disconnected so just discard packet
+          assert(event.peerID<this->nextPeerID_);
+          delete event.packet;
+        }
         break;
       case outgoingEventType::disconnectPeer:
-        assert(this->peerMap_.find(event.peerID) != this->peerMap_.end());
-        peer = this->peerMap_[event.peerID];
-        enet_peer_disconnect(peer, 0);
+        if( this->peerMap_.find(event.peerID) != this->peerMap_.end() )
+        {
+          peer = this->peerMap_[event.peerID];
+          enet_peer_disconnect(peer, 0);
+        }
+        else
+        {
+          // peer probably already disconnected so just discard disconnect event
+          assert(event.peerID<this->nextPeerID_);
+        }
         break;
       case outgoingEventType::disconnectPeers:
         while( this->peerMap_.size()!=0 )




More information about the Orxonox-commit mailing list