code: def _handle_send(self):
      if not self._shadow_sock.get(EVENTS) & POLLOUT:
          # event triggered, but state may have been changed between trigger and callback
          return
      f = None
      while self._send_futures:
          f, kind, kwargs, msg = self._send_futures.popleft()
          # skip any cancelled futures
          if f.done():
              f = None
          else:
              break
  
      if not self._send_futures:
          self._drop_io_state(POLLOUT)
  
      if f is None:
          return
  
      if kind == "poll":
          # on poll event, just signal ready, nothing else.
          f.set_result(None)
          return
      elif kind == "send_multipart":
          send = self._shadow_sock.send_multipart
      elif kind == "send":
          send = self._shadow_sock.send
      else:
          raise ValueError("Unhandled send event type: %r" % kind)
  
      kwargs["flags"] |= _zmq.DONTWAIT
      try:
          result = send(msg, **kwargs)
      except Exception as e:
          f.set_exception(e)
      else:
          f.set_result(result)
  
imports: from collections import namedtuple, deque
  from itertools import chain
  from zmq import EVENTS, POLLOUT, POLLIN
  import zmq
label_desc: Use image node_id 17 for calling the _AsyncSocket obj's underlying member method code with example usage: obj._handle_send() without return types