class_docstr: A non-blocking, single-threaded TCP server.
  
  To use `TCPServer`, define a subclass which overrides the `handle_stream`
  method. For example, a simple echo server could be defined like this::
  
    from tornado.tcpserver import TCPServer
    from tornado.iostream import StreamClosedError
    from tornado import gen
  
    class EchoServer(TCPServer):
        @gen.coroutine
        def handle_stream(self, stream, address):
            while True:
                try:
                    data = yield stream.read_until(b"\n")
                    yield stream.write(data)
                except StreamClosedError:
                    break
  
  To make this server serve SSL traffic, send the ``ssl_options`` keyword
  argument with an `ssl.SSLContext` object. For compatibility with older
  versions of Python ``ssl_options`` may also be a dictionary of keyword
  arguments for the `ssl.wrap_socket` method.::
  
     ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
     ssl_ctx.load_cert_chain(os.path.join(data_dir, "mydomain.crt"),
                             os.path.join(data_dir, "mydomain.key"))
     TCPServer(ssl_options=ssl_ctx)
  
  `TCPServer` initialization follows one of three patterns:
  
  1. `listen`: simple single-process::
  
          server = TCPServer()
          server.listen(8888)
          IOLoop.current().start()
  
  2. `bind`/`start`: simple multi-process::
  
          server = TCPServer()
          server.bind(8888)
          server.start(0)  # Forks multiple sub-processes
          IOLoop.current().start()
  
     When using this interface, an `.IOLoop` must *not* be passed
     to the `TCPServer` constructor.  `start` will always start
     the server on the default singleton `.IOLoop`.
  
  3. `add_sockets`: advanced multi-process::
  
          sockets = bind_sockets(8888)
          tornado.process.fork_processes(0)
          server = TCPServer()
          server.add_sockets(sockets)
          IOLoop.current().start()
  
     The `add_sockets` interface is more complicated, but it can be
     used with `tornado.process.fork_processes` to give you more
     flexibility in when the fork happens.  `add_sockets` can
     also be used in single-process servers if you want to create
     your listening sockets in some way other than
     `~tornado.netutil.bind_sockets`.
  
  .. versionadded:: 3.1
     The ``max_buffer_size`` argument.
docstr: Binds this server to the given port on the given address.
  
  To start the server, call `start`. If you want to run this server
  in a single process, you can call `listen` as a shortcut to the
  sequence of `bind` and `start` calls.
  
  Address may be either an IP address or hostname.  If it's a hostname,
  the server will listen on all IP addresses associated with the
  name.  Address may be an empty string or None to listen on all
  available interfaces.  Family may be set to either `socket.AF_INET`
  or `socket.AF_INET6` to restrict to IPv4 or IPv6 addresses, otherwise
  both will be used if available.
  
  The ``backlog`` argument has the same meaning as for
  `socket.listen <socket.socket.listen>`. The ``reuse_port`` argument
  has the same meaning as for `.bind_sockets`.
  
  This method may be called multiple times prior to `start` to listen
  on multiple ports or interfaces.
  
  .. versionchanged:: 4.4
     Added the ``reuse_port`` argument.
docstr_tok: ["Binds","this","server","to","the","given","port","on","the","given","address",".","To","start","the","server",",","call","`","start","`",".","If","you","want","to","run","this","server","in","a","single","process",",","you","can","call","`","listen","`","as","a","shortcut","to","the","sequence","of","`","bind","`","and","`","start","`","calls",".","Address","may","be","either","an","IP","address","or","hostname",".","If","it","'s","a","hostname",",","the","server","will","listen","on","all","IP","addresses","associated","with","the","name",".","Address","may","be","an","empty","string","or","None","to","listen","on","all","available","interfaces",".","Family","may","be","set","to","either","`","socket.AF_INET","`","or","`","socket.AF_INET6","`","to","restrict","to","IPv4","or","IPv6","addresses",",","otherwise","both","will","be","used","if","available",".","The","``","backlog","``","argument","has","the","same","meaning","as","for","`","socket.listen","<","socket.socket.listen",">","`",".","The","``","reuse_port","``","argument","has","the","same","meaning","as","for","`",".bind_sockets","`",".","This","method","may","be","called","multiple","times","prior","to","`","start","`","to","listen","on","multiple","ports","or","interfaces",".","..","versionchanged",":",":","4.4","Added","the","``","reuse_port","``","argument","."]
code: def bind(
      self,
      port,
      address=None,
      family=socket.AF_UNSPEC,
      backlog=128,
      reuse_port=False,
  ):
      """Binds this server to the given port on the given address.
  
      To start the server, call `start`. If you want to run this server
      in a single process, you can call `listen` as a shortcut to the
      sequence of `bind` and `start` calls.
  
      Address may be either an IP address or hostname.  If it's a hostname,
      the server will listen on all IP addresses associated with the
      name.  Address may be an empty string or None to listen on all
      available interfaces.  Family may be set to either `socket.AF_INET`
      or `socket.AF_INET6` to restrict to IPv4 or IPv6 addresses, otherwise
      both will be used if available.
  
      The ``backlog`` argument has the same meaning as for
      `socket.listen <socket.socket.listen>`. The ``reuse_port`` argument
      has the same meaning as for `.bind_sockets`.
  
      This method may be called multiple times prior to `start` to listen
      on multiple ports or interfaces.
  
      .. versionchanged:: 4.4
         Added the ``reuse_port`` argument.
      """
      sockets = bind_sockets(
          port,
          address=address,
          family=family,
          backlog=backlog,
          reuse_port=reuse_port,
      )
      if self._started:
          self.add_sockets(sockets)
      else:
          self._pending_sockets.extend(sockets)
  
imports: from __future__ import absolute_import, division, print_function
  import errno
  import os
  import socket
  from tornado import gen
  from tornado.log import app_log
  from tornado.ioloop import IOLoop
  from tornado.iostream import IOStream, SSLIOStream
  from tornado.netutil import bind_sockets, add_accept_handler, ssl_wrap_socket
  from tornado import process
  from tornado.util import errno_from_exception
label_desc: Use image node_id 5 for calling the TCPServer obj's underlying member method code with example usage: obj.bind(port, address, family, backlog, reuse_port) without return types