class_docstr: The ZMQ socket object
  
  To create a Socket, first create a Context::
  
      ctx = zmq.Context.instance()
  
  then call ``ctx.socket(socket_type)``::
  
      s = ctx.socket(zmq.ROUTER)
class_docstr_tok: ["The","ZMQ","socket","object","To","create","a","Socket",",","first","create","a","Context",":",":","ctx","=","zmq.Context.instance","(",")","then","call","``","ctx.socket","(","socket_type",")","``",":",":","s","=","ctx.socket","(","zmq.ROUTER",")"]
docstr: Send a single zmq message frame on this socket.
  
  This queues the message to be sent by the IO thread at a later time.
  
  With flags=NOBLOCK, this raises :class:`ZMQError` if the queue is full;
  otherwise, this waits until space is available.
  See :class:`Poller` for more general non-blocking I/O.
  
  Parameters
  ----------
  data : bytes, Frame, memoryview
      The content of the message. This can be any object that provides
      the Python buffer API (i.e. `memoryview(data)` can be called).
  flags : int
      0, NOBLOCK, SNDMORE, or NOBLOCK|SNDMORE.
  copy : bool
      Should the message be sent in a copying or non-copying manner.
  track : bool
      Should the message be tracked for notification that ZMQ has
      finished with it? (ignored if copy=True)
  routing_id : int
      For use with SERVER sockets
  group : str
      For use with RADIO sockets
  
  Returns
  -------
  None : if `copy` or not track
      None if message was sent, raises an exception otherwise.
  MessageTracker : if track and not copy
      a MessageTracker object, whose `pending` property will
      be True until the send is completed.
  
  Raises
  ------
  TypeError
      If a unicode object is passed
  ValueError
      If `track=True`, but an untracked Frame is passed.
  ZMQError
      If the send does not succeed for any reason (including
      if NOBLOCK is set and the outgoing queue is full).
  
  
  .. versionchanged:: 17.0
  
      DRAFT support for routing_id and group arguments.
docstr_tok: ["Send","a","single","zmq","message","frame","on","this","socket",".","This","queues","the","message","to","be","sent","by","the","IO","thread","at","a","later","time",".","With","flags=NOBLOCK",",","this","raises",":","class",":","`","ZMQError","`","if","the","queue","is","full",";","otherwise",",","this","waits","until","space","is","available",".","See",":","class",":","`","Poller","`","for","more","general","non-blocking","I\/O",".","Parameters","--","--","--","--","--","data",":","bytes",",","Frame",",","memoryview","The","content","of","the","message",".","This","can","be","any","object","that","provides","the","Python","buffer","API","(","i.e",".","`","memoryview","(","data",")","`","can","be","called",")",".","flags",":","int","0",",","NOBLOCK",",","SNDMORE",",","or","NOBLOCK|SNDMORE",".","copy",":","bool","Should","the","message","be","sent","in","a","copying","or","non-copying","manner",".","track",":","bool","Should","the","message","be","tracked","for","notification","that","ZMQ","has","finished","with","it","?","(","ignored","if","copy=True",")","routing_id",":","int","For","use","with","SERVER","sockets","group",":","str","For","use","with","RADIO","sockets","Returns","--","--","--","-","None",":","if","`","copy","`","or","not","track","None","if","message","was","sent",",","raises","an","exception","otherwise",".","MessageTracker",":","if","track","and","not","copy","a","MessageTracker","object",",","whose","`","pending","`","property","will","be","True","until","the","send","is","completed",".","Raises","--","--","--","TypeError","If","a","unicode","object","is","passed","ValueError","If","`","track=True","`",",","but","an","untracked","Frame","is","passed",".","ZMQError","If","the","send","does","not","succeed","for","any","reason","(","including","if","NOBLOCK","is","set","and","the","outgoing","queue","is","full",")",".","..","versionchanged",":",":","17.0","DRAFT","support","for","routing_id","and","group","arguments","."]
code: def send(
      self,
      data,
      flags=0,
      copy=True,
      track=False,
      routing_id=None,
      group=None,
  ):
      """Send a single zmq message frame on this socket.
  
      This queues the message to be sent by the IO thread at a later time.
  
      With flags=NOBLOCK, this raises :class:`ZMQError` if the queue is full;
      otherwise, this waits until space is available.
      See :class:`Poller` for more general non-blocking I/O.
  
      Parameters
      ----------
      data : bytes, Frame, memoryview
          The content of the message. This can be any object that provides
          the Python buffer API (i.e. `memoryview(data)` can be called).
      flags : int
          0, NOBLOCK, SNDMORE, or NOBLOCK|SNDMORE.
      copy : bool
          Should the message be sent in a copying or non-copying manner.
      track : bool
          Should the message be tracked for notification that ZMQ has
          finished with it? (ignored if copy=True)
      routing_id : int
          For use with SERVER sockets
      group : str
          For use with RADIO sockets
  
      Returns
      -------
      None : if `copy` or not track
          None if message was sent, raises an exception otherwise.
      MessageTracker : if track and not copy
          a MessageTracker object, whose `pending` property will
          be True until the send is completed.
  
      Raises
      ------
      TypeError
          If a unicode object is passed
      ValueError
          If `track=True`, but an untracked Frame is passed.
      ZMQError
          If the send does not succeed for any reason (including
          if NOBLOCK is set and the outgoing queue is full).
  
  
      .. versionchanged:: 17.0
  
          DRAFT support for routing_id and group arguments.
      """
      if routing_id is not None:
          if not isinstance(data, zmq.Frame):
              data = zmq.Frame(
                  data,
                  track=track,
                  copy=copy or None,
                  copy_threshold=self.copy_threshold,
              )
          data.routing_id = routing_id
      if group is not None:
          if not isinstance(data, zmq.Frame):
              data = zmq.Frame(
                  data,
                  track=track,
                  copy=copy or None,
                  copy_threshold=self.copy_threshold,
              )
          data.group = group
      return super(Socket, self).send(
          data, flags=flags, copy=copy, track=track
      )
  
imports: import errno
  import random
  import sys
  import warnings
  import zmq
  from zmq.backend import Socket
  from .poll import Poller
  from .None import constants
  from .attrsettr import AttributeSetter
  from zmq.error import ZMQError, ZMQBindError
  from zmq.utils import jsonapi
  from zmq.utils.strtypes import bytes, unicode, basestring
  from .constants import SNDMORE, ENOTSUP, POLLIN, int64_sockopt_names, int_sockopt_names, bytes_sockopt_names, fd_sockopt_names
label_desc: Use image node_id 19 for calling the Socket obj's underlying member method code with example usage: obj.send(data, flags, copy, track, routing_id, group) and returns: super