class_docstr: Explicitly coordinate the level Tornado components required to run a
  Bokeh server:
  
  * A Tornado ``IOLoop`` to run the Bokeh server machinery.
  
  * a ``BokehTornado`` Tornado application that defines the Bokeh server
    machinery.
  
  * a Tornado ``HTTPServer`` to direct HTTP requests
  
  All three of these components must be passed to ``BaseServer``, which will
  initialize the ``BokehTornado`` instance on the ``io_loop``. The
  ``http_server`` must have been previously created and initialized with the
  ``BokehTornado`` instance.
docstr: The configured port number that the server listens on for HTTP requests
          
docstr_tok: ["The","configured","port","number","that","the","server","listens","on","for","HTTP","requests"]
code: def port(self) -> int | None:
      """The configured port number that the server listens on for HTTP requests"""
      sock = next(
          sock
          for sock in self._http._sockets.values()
          if sock.family in (socket.AF_INET, socket.AF_INET6)
      )
      return sock.getsockname()[1]
  
imports: from __future__ import annotations
  import logging
  import atexit
  import signal
  import socket
  import sys
  from types import FrameType
  from typing import TYPE_CHECKING, Any, Mapping
  from tornado import netutil, version
  from tornado.httpserver import HTTPServer
  from tornado.ioloop import IOLoop
  from ..None import __version__
  from ..core import properties
  from ..core.properties import Bool, Int, Nullable, String
  from ..resources import DEFAULT_SERVER_PORT, server_url
  from ..util.options import Options
  from .tornado import DEFAULT_WEBSOCKET_MAX_MESSAGE_SIZE_BYTES, BokehTornado
  from .util import bind_sockets, create_hosts_allowlist
label_desc: Use image node_id 12 for calling the BaseServer obj's underlying member method code with example usage: obj.port() and returns: sock