@Override public SocketAddress getRemoteAddress() { final SocketHolder socketHolder = this.socketHolderRef.get(); return socketHolder != null ? socketHolder.getSocket().getRemoteSocketAddress() : null; }
@Override public SocketAddress getLocalAddress() { final SocketHolder socketHolder = this.socketHolderRef.get(); return socketHolder != null ? socketHolder.getSocket().getLocalSocketAddress() : null; }
@Override public SocketAddress getLocalAddress() { final SocketHolder socketHolder = this.socketHolderRef.get(); return socketHolder != null ? socketHolder.getSocket().getLocalSocketAddress() : null; }
@Override public SSLSession getSSLSession() { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { final Socket socket = socketHolder.getSocket(); return socket instanceof SSLSocket ? ((SSLSocket) socket).getSession() : null; } return null; }
@Override public SocketAddress getRemoteAddress() { final SocketHolder socketHolder = this.socketHolderRef.get(); return socketHolder != null ? socketHolder.getSocket().getRemoteSocketAddress() : null; }
@Override public SSLSession getSSLSession() { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { final Socket socket = socketHolder.getSocket(); return socket instanceof SSLSocket ? ((SSLSocket) socket).getSession() : null; } return null; }
@Override public Socket getSocket() { final SocketHolder socketHolder = getSocketHolder(); return socketHolder != null ? socketHolder.getSocket() : null; }
@Override public void bind(final SocketHolder socketHolder) throws IOException { if (this.closed.get()) { final Socket socket = socketHolder.getSocket(); socket.close(); // allow this to throw... // ...but if it doesn't, explicitly throw one ourselves. throw new InterruptedIOException("Connection already shutdown"); } super.bind(socketHolder); socketTimeout = Timeout.ofMilliseconds(socketHolder.getSocket().getSoTimeout()); }
@Override public Timeout getSocketTimeout() { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { try { return Timeout.ofMilliseconds(socketHolder.getSocket().getSoTimeout()); } catch (final SocketException ignore) { } } return Timeout.DISABLED; }
@Override public Timeout getSocketTimeout() { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { try { return Timeout.ofMilliseconds(socketHolder.getSocket().getSoTimeout()); } catch (final SocketException ignore) { } } return Timeout.DISABLED; }
@Override public void close(final CloseMode closeMode) { final SocketHolder socketHolder = this.socketHolderRef.getAndSet(null); if (socketHolder != null) { final Socket socket = socketHolder.getSocket(); try { if (closeMode == CloseMode.IMMEDIATE) { // force abortive close (RST) socket.setSoLinger(true, 0); } } catch (final IOException ignore) { } finally { Closer.closeQuietly(socket); } } }
@Override public void close(final CloseMode closeMode) { final SocketHolder socketHolder = this.socketHolderRef.getAndSet(null); if (socketHolder != null) { final Socket socket = socketHolder.getSocket(); try { if (closeMode == CloseMode.IMMEDIATE) { // force abortive close (RST) socket.setSoLinger(true, 0); } } catch (final IOException ignore) { } finally { Closer.closeQuietly(socket); } } }
@Override public String toString() { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { final Socket socket = socketHolder.getSocket(); final StringBuilder buffer = new StringBuilder(); final SocketAddress remoteAddress = socket.getRemoteSocketAddress(); final SocketAddress localAddress = socket.getLocalSocketAddress(); if (remoteAddress != null && localAddress != null) { InetAddressUtils.formatAddress(buffer, localAddress); buffer.append("<->"); InetAddressUtils.formatAddress(buffer, remoteAddress); } return buffer.toString(); } return "[Not bound]"; }
@Override public void setSocketTimeout(final Timeout timeout) { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { try { socketHolder.getSocket().setSoTimeout(Timeout.defaultsToDisabled(timeout).toMillisIntBound()); } catch (final SocketException ignore) { // It is not quite clear from the Sun's documentation if there are any // other legitimate cases for a socket exception to be thrown when setting // SO_TIMEOUT besides the socket being already closed } } }
@Override public void setSocketTimeout(final Timeout timeout) { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { try { socketHolder.getSocket().setSoTimeout(Timeout.defaultsToDisabled(timeout).toMillisIntBound()); } catch (final SocketException ignore) { // It is not quite clear from the Sun's documentation if there are any // other legitimate cases for a socket exception to be thrown when setting // SO_TIMEOUT besides the socket being already closed } } }
@Override public String toString() { final SocketHolder socketHolder = this.socketHolderRef.get(); if (socketHolder != null) { final Socket socket = socketHolder.getSocket(); final StringBuilder buffer = new StringBuilder(); final SocketAddress remoteAddress = socket.getRemoteSocketAddress(); final SocketAddress localAddress = socket.getLocalSocketAddress(); if (remoteAddress != null && localAddress != null) { InetAddressUtils.formatAddress(buffer, localAddress); buffer.append("<->"); InetAddressUtils.formatAddress(buffer, remoteAddress); } return buffer.toString(); } return "[Not bound]"; }
private int fillInputBuffer(final int timeout) throws IOException { final SocketHolder socketHolder = ensureOpen(); final Socket socket = socketHolder.getSocket(); final int oldtimeout = socket.getSoTimeout(); try { socket.setSoTimeout(timeout); return this.inBuffer.fillBuffer(socketHolder.getInputStream()); } finally { socket.setSoTimeout(oldtimeout); } }
private int fillInputBuffer(final int timeout) throws IOException { final SocketHolder socketHolder = ensureOpen(); final Socket socket = socketHolder.getSocket(); final int oldtimeout = socket.getSoTimeout(); try { socket.setSoTimeout(timeout); return this.inBuffer.fillBuffer(socketHolder.getInputStream()); } finally { socket.setSoTimeout(oldtimeout); } }
@Override public void close() throws IOException { final SocketHolder socketHolder = this.socketHolderRef.getAndSet(null); if (socketHolder != null) { try (final Socket socket = socketHolder.getSocket()) { this.inBuffer.clear(); this.outbuffer.flush(socketHolder.getOutputStream()); try { try { socket.shutdownOutput(); } catch (final IOException ignore) { } try { socket.shutdownInput(); } catch (final IOException ignore) { } } catch (final UnsupportedOperationException ignore) { // if one isn't supported, the other one isn't either } } } }
@Override public void close() throws IOException { final SocketHolder socketHolder = this.socketHolderRef.getAndSet(null); if (socketHolder != null) { try (final Socket socket = socketHolder.getSocket()) { this.inBuffer.clear(); this.outbuffer.flush(socketHolder.getOutputStream()); try { try { socket.shutdownOutput(); } catch (final IOException ignore) { } try { socket.shutdownInput(); } catch (final IOException ignore) { } } catch (final UnsupportedOperationException ignore) { // if one isn't supported, the other one isn't either } } } }