public void run() {

        /////////////////////////////////////////////////////
        // For ease of I/O (since we haven't yet discussed
        // binary packet data), convert the distance vector into
        // a String so it can be read using a Scanner:
        /////////////////////////////////////////////////////
        String dvs = convert(from.getDv());

        /////////////////////////////////////////////////////
        // Make ten attempts to send the packet, then give up. The ten attempts
        // are separated by a one-second wait. This is simply to give the user
        // enough time to manually start up all the routers.
        /////////////////////////////////////////////////////
        Socket sock = null;
        boolean done = false;
        int tries = 0;


        while (!done && tries < 10) {
            try {
                Thread.sleep(1000); // delay for manual start

                sock = BroadcastingService.getSocket(from, to); // obtener socket del pool

                Setup.println("[BroadcastingService.run] Notificando a " + to.getAddr().getHostAddress());
                DataOutputStream out = new DataOutputStream(sock.getOutputStream());
                if (keepalive){
                    String msg = getKeepAliveMsg(from);
                    Setup.println(msg.replaceAll("^", "[BroadcastingService.run]\n"));
                    out.writeBytes(msg);
                } else {
                    Setup.println(dvs.replaceAll("^", "[BroadcastingService.run]\n"));
                    out.writeBytes(dvs);
                }
                out.flush();

                //  sock.close();
                done = true;
            } catch (Exception e) {
                tries = 10;//tries++;
                //   if (tries >= 10)
                Setup.println("[BroadcastingService.run] No es posible enviar a " +
                        to.getAddr().getHostAddress());
                sockets.remove(to);
            }
        }
    }