public void run() {
		DatagramPacket pack = new DatagramPacket(new byte[maxPacketSize], maxPacketSize);
		while( true ) {
			try {
				pack.setLength(maxPacketSize);
				sock.receive(pack);
			} catch( IOException e ) {
				throw new RuntimeException(e);
			}
			
			synchronized( packetListeners ) {
				if( packetListeners.size() == 0 ) continue; 
			}
			
			byte[] buff = pack.getData();
			byte[] data = new byte[pack.getLength()];
			for( int i=data.length-1; i>=0; --i ) data[i] = buff[i];
			
			HLDatagram<byte[]> incomingPacket = new HLDatagram<byte[]>( pack.getSocketAddress(), localAddress, data );
			
			synchronized( packetListeners ) {
				for( PacketListener<HLDatagram<byte[]>> l : packetListeners ) {
					l.packetReceived(incomingPacket);
				}
			}
		}
	}