class_docstr: A ZMQ socket wrapper
docstr: Create a channel.
  
  Parameters
  ----------
  socket : :class:`zmq.Socket`
      The ZMQ socket to use.
  session : :class:`session.Session`
      The session to use.
  loop
      Unused here, for other implementations
code: def __init__(
      self, socket: zmq.Socket, session: Session, loop: t.Any = None
  ) -> None:
      """Create a channel.
  
      Parameters
      ----------
      socket : :class:`zmq.Socket`
          The ZMQ socket to use.
      session : :class:`session.Session`
          The session to use.
      loop
          Unused here, for other implementations
      """
      super().__init__()
  
      self.socket: t.Optional[zmq.Socket] = socket
      self.session = session
  
imports: import asyncio
  import atexit
  import time
  import typing
  from queue import Empty
  from threading import Event, Thread
  import zmq.asyncio
  from jupyter_core.utils import ensure_async
  from ._version import protocol_version_info
  from .channelsabc import HBChannelABC
  from .session import Session
label_desc: Use image node_id 1 to create a new ZMQSocketChannel object  with example: obj = ZMQSocketChannel(socket, session, loop)