':param hostid: My hostname/IP address + optional tag.
:param tag: Symbolic name of the barrier in progress.
:param timeout: Maximum seconds to wait for a the barrier to meet.
:param port: Port number to listen on.
:param listen_server: External listen_server instance to use instead
of creating our own.  Create a listen_server instance and
reuse it across multiple barrier instances so that the
barrier code doesn\'t try to quickly re-bind on the same port
(packets still in transit for the previous barrier they may
reset new connections).'

def __init__(self, hostid, tag, timeout=None, port=None, listen_server=None):

    self._hostid = hostid
    self._tag = tag
    if listen_server:
        if port:
            raise error.BarrierError('"port"    and    "listen_server"    are    mutually    exclusive.')
        self._port = listen_server.port
    else:
        self._port = (port or _DEFAULT_PORT)
    self._server = listen_server
    self._members = []
    self._timeout_secs = timeout
    self._start_time = None
    self._masterid = None
    logging.info('tag=%s    port=%d    timeout=%r', self._tag, self._port, self._timeout_secs)
    self._seen = 0
    self._waiting = {}
