':param tuple remote_addr: remote server\'s IP address, whose structure
depends on remote_addr_family; pair (host-or-ip-addr, port-number).
Pass None to have ForwardServer behave as echo server.
:param remote_addr_family: socket.AF_INET (the default), socket.AF_INET6
or socket.AF_UNIX.
:param remote_socket_type: only socket.SOCK_STREAM is supported at this
time
:param server_addr: optional address for binding this server\'s listening
socket; the format depends on server_addr_family; defaults to
("127.0.0.1", 0)
:param server_addr_family: Address family for this server\'s listening
socket; socket.AF_INET (the default), socket.AF_INET6 or
socket.AF_UNIX; defaults to socket.AF_INET
:param server_socket_type: only socket.SOCK_STREAM is supported at this
time
:param tuple local_linger_args: SO_LINGER sockoverride for the local
connection sockets, to be configured after connection is accepted.
None for default, which is to not change the SO_LINGER option.
Otherwise, its a two-tuple, where the first element is the `l_onoff`
switch, and the second element is the `l_linger` value, in seconds'

def __init__(self, remote_addr, remote_addr_family=socket.AF_INET, remote_socket_type=socket.SOCK_STREAM, server_addr=('127.0.0.1', 0), server_addr_family=socket.AF_INET, server_socket_type=socket.SOCK_STREAM, local_linger_args=None):

    self._logger = logging.getLogger(__name__)
    self._remote_addr = remote_addr
    self._remote_addr_family = remote_addr_family
    assert (remote_socket_type == socket.SOCK_STREAM), remote_socket_type
    self._remote_socket_type = remote_socket_type
    assert (server_addr is not None)
    self._server_addr = server_addr
    assert (server_addr_family is not None)
    self._server_addr_family = server_addr_family
    assert (server_socket_type == socket.SOCK_STREAM), server_socket_type
    self._server_socket_type = server_socket_type
    self._local_linger_args = local_linger_args
    self._subproc = None
