Package org.jboss.logmanager.handlers

# Class TcpOutputStream

java.lang.Object
java.io.OutputStream
org.jboss.logmanager.handlers.TcpOutputStream

All Implemented Interfaces:
  `Closeable`, `Flushable`, `AutoCloseable`, `FlushableCloseable`

Direct Known Subclasses:
  `SslTcpOutputStream`

public class TcpOutputStream extends OutputStream implements FlushableCloseable
An output stream that writes data to a `socket`.

If an `IOException` occurs during a `write(byte[], int, int)` and a `socket factory` was defined the stream will attempt to reconnect indefinitely. By default additional writes are discarded when reconnecting. If you set the `block on reconnect` to `true`, then the reconnect will indefinitely block until the TCP stream is reconnected.

You can optionally get a collection of the errors that occurred during a write or reconnect.

Author:
  James R. Perkins

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final Object`
`outputLock`

## Constructor Summary

Constructors
Modifier
Constructor
Description
``
`TcpOutputStream(InetAddress address, int port)`
Creates a TCP output stream.
``
`TcpOutputStream(InetAddress address, int port, boolean blockOnReconnect)`
Creates a TCP output stream.
`protected`
`TcpOutputStream(Socket socket)`
Deprecated.
Use `TcpOutputStream(ClientSocketFactory, boolean)`
`protected`
`TcpOutputStream(SocketFactory socketFactory, InetAddress address, int port)`
Creates a new TCP output stream.
`protected`
`TcpOutputStream(SocketFactory socketFactory, InetAddress address, int port, boolean blockOnReconnect)`
Creates a new TCP output stream.
``
`TcpOutputStream(ClientSocketFactory socketFactory, boolean blockOnReconnect)`
Creates a new TCP stream which uses the `ClientSocketFactory.createSocket()` to create the socket.

## Method Summary

Modifier and Type
Method
Description
`void`
`close()`
`void`
`flush()`
`Collection<Exception>`
`getErrors()`
Retrieves the errors occurred, if any, during a write or reconnect.
`boolean`
`isBlockOnReconnect()`
Indicates whether or not the output stream is set to block when attempting to reconnect a TCP connection.
`boolean`
`isConnected()`
Returns the connected state of the TCP stream.
`void`
`setBlockOnReconnect(boolean blockOnReconnect)`
Enables or disables blocking when attempting to reconnect the socket.
`void`
`write(byte[] b)`
`void`
`write(byte[] b, int off, int len)`
`void`
`write(int b)`

### Methods inherited from class java.io.OutputStream

`nullOutputStream`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### outputLock

protected final Object outputLock

## Constructor Details

### TcpOutputStream

public TcpOutputStream(InetAddress address, int port) throws IOException
Creates a TCP output stream.

Uses the `default socket factory` to create the socket.

Parameters:
  `address` - the address to connect to
  `port` - the port to connect to
Throws:
  `IOException` - no longer throws an exception. If an exception occurs while attempting to connect the socket a reconnect will be attempted on the next write.

### TcpOutputStream

public TcpOutputStream(InetAddress address, int port, boolean blockOnReconnect) throws IOException
Creates a TCP output stream.

Uses the `default socket factory` to create the socket.

Parameters:
  `address` - the address to connect to
  `port` - the port to connect to
  `blockOnReconnect` - `true` to block when attempting to reconnect the socket or `false` to reconnect asynchronously
Throws:
  `IOException` - no longer throws an exception. If an exception occurs while attempting to connect the socket a reconnect will be attempted on the next write.

### TcpOutputStream

@Deprecated protected TcpOutputStream(Socket socket)
Deprecated.
Use `TcpOutputStream(ClientSocketFactory, boolean)`
Creates a new TCP output stream.

Using this constructor does not allow for any kind of reconnect if the connection is dropped.

Parameters:
  `socket` - the socket used to write the output to

### TcpOutputStream

protected TcpOutputStream(SocketFactory socketFactory, InetAddress address, int port) throws IOException
Creates a new TCP output stream.

Creates a `socket` from the `socketFactory` argument.

Parameters:
  `socketFactory` - the factory used to create the socket
  `address` - the address to connect to
  `port` - the port to connect to
Throws:
  `IOException` - no longer throws an exception. If an exception occurs while attempting to connect the socket a reconnect will be attempted on the next write.

### TcpOutputStream

protected TcpOutputStream(SocketFactory socketFactory, InetAddress address, int port, boolean blockOnReconnect) throws IOException
Creates a new TCP output stream.

Creates a `socket` from the `socketFactory` argument.

Parameters:
  `socketFactory` - the factory used to create the socket
  `address` - the address to connect to
  `port` - the port to connect to
  `blockOnReconnect` - `true` to block when attempting to reconnect the socket or `false` to reconnect asynchronously
Throws:
  `IOException` - no longer throws an exception. If an exception occurs while attempting to connect the socket a reconnect will be attempted on the next write.

### TcpOutputStream

public TcpOutputStream(ClientSocketFactory socketFactory, boolean blockOnReconnect)
Creates a new TCP stream which uses the `ClientSocketFactory.createSocket()` to create the socket.

Parameters:
  `socketFactory` - the socket factory used to create TCP sockets
  `blockOnReconnect` - `true` to block when attempting to reconnect the socket or `false` to reconnect asynchronously

## Method Details

### write

public void write(int b) throws IOException

Specified by:
  `write` in class `OutputStream`
Throws:
  `IOException`

### write

public void write(byte[] b) throws IOException

Overrides:
  `write` in class `OutputStream`
Throws:
  `IOException`

### write

public void write(byte[] b, int off, int len) throws IOException

Overrides:
  `write` in class `OutputStream`
Throws:
  `IOException`

### flush

public void flush() throws IOException

Specified by:
  `flush` in interface `Flushable`
Overrides:
  `flush` in class `OutputStream`
Throws:
  `IOException`

### close

public void close() throws IOException

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `OutputStream`
Throws:
  `IOException`

### isBlockOnReconnect

public boolean isBlockOnReconnect()
Indicates whether or not the output stream is set to block when attempting to reconnect a TCP connection.

Returns:
  `true` if blocking is enabled, otherwise `false`

### setBlockOnReconnect

public void setBlockOnReconnect(boolean blockOnReconnect)
Enables or disables blocking when attempting to reconnect the socket.

If set to `true` the `write` methods will block when attempting to reconnect. This is only advisable to be set to `true` if using an asynchronous handler.

Parameters:
  `blockOnReconnect` - `true` to block when reconnecting or `false` to reconnect asynchronously discarding any new messages coming in

### isConnected

public boolean isConnected()
Returns the connected state of the TCP stream.

The stream is said to be disconnected when an `IOException` occurs during a write. Otherwise a stream is considered connected.

Returns:
  `true` if the stream is connected, otherwise `false`

### getErrors

public Collection<Exception> getErrors()
Retrieves the errors occurred, if any, during a write or reconnect.

Returns:
  a collection of errors or an empty list