protected BlockingConnection connect(boolean ultrapeer) throws Exception { ServerSocket ss = new ServerSocket(); ss.setReuseAddress(true); ss.bind(new InetSocketAddress(0)); connectionServices.connectToHostAsynchronously( "127.0.0.1", ss.getLocalPort(), ConnectType.PLAIN); Socket socket = ss.accept(); ss.close(); socket.setSoTimeout(3000); InputStream in = socket.getInputStream(); String word = IOUtils.readWord(in, 9); if (!word.equals("GNUTELLA")) throw new IOException("Bad word: " + word); HandshakeResponder responder; if (ultrapeer) { responder = new UltrapeerResponder(); } else { responder = new OldResponder(); } BlockingConnection con = blockingConnectionFactory.createConnection(socket); con.initialize(null, responder, 1000); replyToPing(con, ultrapeer); return con; }