public /*synchronized*/ void run()
	{
		Peer l_tmp_peer = null;
		int  l_tmp_error_count = 0;
		this.Receiver_enabled = true;
		
		while( this.Receiver_enabled )
		{
			try {
				
				l_tmp_peer = Recv();

				while( this.Receiver_peers.contains(l_tmp_peer))
					this.Receiver_peers.remove(l_tmp_peer);
				
				this.Receiver_peers.add( l_tmp_peer );
				
				l_tmp_error_count = 0;
				
			} catch (IOException e) 
			{
				// TODO Auto-generated catch block
				
				if( this.Receiver_enabled )
				{
					Logger.exception(e.toString());
					/* IO Error, just wait a bit, network can be down */
					try {
						Thread.sleep( this.Receiver_timeout*10 );
					} catch (InterruptedException e1) {
						// TODO Auto-generated catch block
						Logger.exception(e1.toString());
					}
				}
				else
				{
					/* NOTHING TO DO SOCKET WAS INTENTIONNALLY CLOSED */
				}
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				Logger.exception(e.toString());
				
				l_tmp_error_count++;
			} 
			
			if( l_tmp_error_count > 3)
			{
				/*
				 * If error count is higher than 3, stop all
				 * It means something bad occur 3 times consecutively or more
				 */
				exit();
			}
		}
	}