/** Creates a connection stub and binds it, use {@link #connect(Address)} to connect */ public TcpConnection(Address peer_addr, TcpBaseServer server) throws Exception { this.server=server; if(peer_addr == null) throw new IllegalArgumentException("Invalid parameter peer_addr="+ peer_addr); this.peer_addr=peer_addr; this.sock=server.socketFactory().createSocket("jgroups.tcp.sock"); setSocketParameters(sock); last_access=getTimestamp(); // last time a message was sent or received (ns) }
/** * Creates a socket to {@code dest}, and assigns it to ping_sock. Also assigns ping_input */ protected boolean setupPingSocket(IpAddress dest) { lock.lock(); try { SocketAddress destAddr=new InetSocketAddress(dest.getIpAddress(), dest.getPort()); ping_sock=getSocketFactory().createSocket("jgroups.fd.ping_sock"); Util.bind(ping_sock, bind_addr, client_bind_port, client_bind_port+port_range); ping_sock.setSoLinger(true, 1); ping_sock.setKeepAlive(keep_alive); Util.connect(ping_sock, destAddr, sock_conn_timeout); ping_input=ping_sock.getInputStream(); return true; } catch(Throwable ex) { if(!shuttin_down) log.debug("%s: failed connecting to %s: %s", local_addr, ping_dest != null? ping_dest : dest, ex.getMessage()); return false; } finally { lock.unlock(); } }
protected Tuple<InputStream,Object> createStreamToProvider(Address provider, StateHeader hdr) throws Exception { IpAddress address=hdr.bind_addr; Socket socket=null; try { socket=getSocketFactory().createSocket("jgroups.state_sock.sock"); socket.bind(new InetSocketAddress(bind_addr, 0)); socket.setReceiveBufferSize(buffer_size); Util.connect(socket, new InetSocketAddress(address.getIpAddress(), address.getPort()), 0); log.debug("%s: connected to state provider %s:%d", local_addr, address.getIpAddress(), address.getPort()); DataOutputStream out=new DataOutputStream(socket.getOutputStream()); Util.writeAddress(local_addr, out); return new Tuple<>(new BufferedInputStream(socket.getInputStream(), buffer_size), socket); } catch(Throwable t) { Util.close(socket); if(t instanceof Exception) throw (Exception)t; throw new Exception("failed creating socket", t); } }
private void createSocket(String serviceName, String bindingName) throws IOException { ManagedSocketFactory factory = mock(ManagedSocketFactory.class); Socket socket1 = mock(Socket.class); Socket socket2 = mock(Socket.class); Socket socket3 = mock(Socket.class); Socket socket4 = mock(Socket.class); Socket socket5 = mock(Socket.class); InetAddress localhost = InetAddress.getLocalHost(); when(this.manager.getSocketFactory()).thenReturn(factory); when(factory.createSocket(bindingName)).thenReturn(socket1); when(factory.createSocket(bindingName, localhost, 1)).thenReturn(socket2); when(factory.createSocket(bindingName, "host", 1)).thenReturn(socket3); when(factory.createSocket(bindingName, localhost, 1, localhost, 2)).thenReturn(socket4); when(factory.createSocket(bindingName, "host", 1, localhost, 2)).thenReturn(socket5); Socket result1 = this.subject.createSocket(serviceName); Socket result2 = this.subject.createSocket(serviceName, localhost, 1); Socket result3 = this.subject.createSocket(serviceName, "host", 1); Socket result4 = this.subject.createSocket(serviceName, localhost, 1, localhost, 2); Socket result5 = this.subject.createSocket(serviceName, "host", 1, localhost, 2); assertSame(socket1, result1); assertSame(socket2, result2); assertSame(socket3, result3); assertSame(socket4, result4); assertSame(socket5, result5); }
@Override public Socket createSocket(String name, String host, int port, InetAddress localAddress, int localPort) throws IOException { return this.register(this.factory.createSocket(name, host, port, localAddress, localPort)); }
@Override public Socket createSocket(String name, String host, int port) throws IOException { return this.register(this.factory.createSocket(name, host, port)); }
@Override public Socket createSocket(String name, String host, int port, InetAddress localAddress, int localPort) throws IOException { return this.register(this.factory.createSocket(name, host, port, localAddress, localPort)); }
@Override public Socket createSocket(String name, String host, int port) throws IOException { return this.register(this.factory.createSocket(name, host, port)); }
@Override public Socket createSocket(String name, InetAddress address, int port) throws IOException { return this.register(this.factory.createSocket(name, address, port)); }
@Override public Socket createSocket(String name) throws IOException { return this.register(this.factory.createSocket(name)); }
@Override public Socket createSocket(String name, InetAddress address, int port) throws IOException { return this.register(this.factory.createSocket(name, address, port)); }
@Override public Socket createSocket(String name, InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { return this.register(this.factory.createSocket(name, address, port, localAddress, localPort)); }
@Override public Socket createSocket(String name) throws IOException { return this.register(this.factory.createSocket(name)); }
@Override public Socket createSocket(String name, InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { return this.register(this.factory.createSocket(name, address, port, localAddress, localPort)); }
/** Creates a connection stub and binds it, use {@link #connect(Address)} to connect */ public TcpConnection(Address peer_addr, TcpBaseServer server) throws Exception { this.server=server; if(peer_addr == null) throw new IllegalArgumentException("Invalid parameter peer_addr="+ peer_addr); this.peer_addr=peer_addr; this.sock=server.socketFactory().createSocket("jgroups.tcp.sock"); setSocketParameters(sock); last_access=getTimestamp(); // last time a message was sent or received (ns) }
/** * Creates a socket to {@code dest}, and assigns it to ping_sock. Also assigns ping_input */ protected boolean setupPingSocket(IpAddress dest) { lock.lock(); try { SocketAddress destAddr=new InetSocketAddress(dest.getIpAddress(), dest.getPort()); ping_sock=getSocketFactory().createSocket("jgroups.fd.ping_sock"); Util.bind(ping_sock, bind_addr, client_bind_port, client_bind_port+port_range); ping_sock.setSoLinger(true, 1); ping_sock.setKeepAlive(keep_alive); Util.connect(ping_sock, destAddr, sock_conn_timeout); ping_input=ping_sock.getInputStream(); return true; } catch(Throwable ex) { if(!shuttin_down) log.debug("%s: failed connecting to %s: %s", local_addr, ping_dest != null? ping_dest : dest, ex.getMessage()); return false; } finally { lock.unlock(); } }
protected Tuple<InputStream,Object> createStreamToProvider(Address provider, StateHeader hdr) throws Exception { IpAddress address=hdr.bind_addr; Socket socket=null; try { socket=getSocketFactory().createSocket("jgroups.state_sock.sock"); socket.bind(new InetSocketAddress(bind_addr, 0)); socket.setReceiveBufferSize(buffer_size); Util.connect(socket, new InetSocketAddress(address.getIpAddress(), address.getPort()), 0); log.debug("%s: connected to state provider %s:%d", local_addr, address.getIpAddress(), address.getPort()); DataOutputStream out=new DataOutputStream(socket.getOutputStream()); Util.writeAddress(local_addr, out); return new Tuple<>(new BufferedInputStream(socket.getInputStream(), buffer_size), socket); } catch(Throwable t) { Util.close(socket); if(t instanceof Exception) throw (Exception)t; throw new Exception("failed creating socket", t); } }
@Test public void createSocket() throws IOException { Socket socket1 = new Socket(); Socket socket2 = new Socket(); Socket socket3 = new Socket(); Socket socket4 = new Socket(); Socket socket5 = new Socket(); InetAddress localhost = InetAddress.getLocalHost(); when(this.factory.createSocket("test")).thenReturn(socket1); when(this.factory.createSocket("test", localhost, 1)).thenReturn(socket2); when(this.factory.createSocket("test", "host", 1)).thenReturn(socket3); when(this.factory.createSocket("test", localhost, 1, localhost, 2)).thenReturn(socket4); when(this.factory.createSocket("test", "host", 1, localhost, 2)).thenReturn(socket5); Socket result1 = this.subject.createSocket("test"); Socket result2 = this.subject.createSocket("test", localhost, 1); Socket result3 = this.subject.createSocket("test", "host", 1); Socket result4 = this.subject.createSocket("test", localhost, 1, localhost, 2); Socket result5 = this.subject.createSocket("test", "host", 1, localhost, 2); verify(this.manager.getUnnamedRegistry()).registerSocket(socket1); verify(this.manager.getUnnamedRegistry()).registerSocket(socket2); verify(this.manager.getUnnamedRegistry()).registerSocket(socket3); verify(this.manager.getUnnamedRegistry()).registerSocket(socket4); verify(this.manager.getUnnamedRegistry()).registerSocket(socket5); assertSame(socket1, result1); assertSame(socket2, result2); assertSame(socket3, result3); assertSame(socket4, result4); assertSame(socket5, result5); }