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: Receive a multipart message as a list of bytes or Frame objects
  
  Parameters
  ----------
  flags : int, optional
      Any valid flags for :func:`Socket.recv`.
  copy : bool, optional
      Should the message frame(s) be received in a copying or non-copying manner?
      If False a Frame object is returned for each part, if True a copy of
      the bytes is made for each frame.
  track : bool, optional
      Should the message frame(s) be tracked for notification that ZMQ has
      finished with it? (ignored if copy=True)
  
  Returns
  -------
  msg_parts : list
      A list of frames in the multipart message; either Frames or bytes,
      depending on `copy`.
  
  Raises
  ------
  ZMQError
      for any of the reasons :func:`~Socket.recv` might fail
docstr_tok: ["Receive","a","multipart","message","as","a","list","of","bytes","or","Frame","objects","Parameters","--","--","--","--","--","flags",":","int",",","optional","Any","valid","flags","for",":","func",":","`","Socket.recv","`",".","copy",":","bool",",","optional","Should","the","message","frame","(","s",")","be","received","in","a","copying","or","non-copying","manner","?","If","False","a","Frame","object","is","returned","for","each","part",",","if","True","a","copy","of","the","bytes","is","made","for","each","frame",".","track",":","bool",",","optional","Should","the","message","frame","(","s",")","be","tracked","for","notification","that","ZMQ","has","finished","with","it","?","(","ignored","if","copy=True",")","Returns","--","--","--","-","msg_parts",":","list","A","list","of","frames","in","the","multipart","message",";","either","Frames","or","bytes",",","depending","on","`","copy","`",".","Raises","--","--","--","ZMQError","for","any","of","the","reasons",":","func",":","`","~Socket.recv","`","might","fail"]
code: def recv_multipart(self, flags=0, copy=True, track=False):
      """Receive a multipart message as a list of bytes or Frame objects
  
      Parameters
      ----------
      flags : int, optional
          Any valid flags for :func:`Socket.recv`.
      copy : bool, optional
          Should the message frame(s) be received in a copying or non-copying manner?
          If False a Frame object is returned for each part, if True a copy of
          the bytes is made for each frame.
      track : bool, optional
          Should the message frame(s) be tracked for notification that ZMQ has
          finished with it? (ignored if copy=True)
  
      Returns
      -------
      msg_parts : list
          A list of frames in the multipart message; either Frames or bytes,
          depending on `copy`.
  
      Raises
      ------
      ZMQError
          for any of the reasons :func:`~Socket.recv` might fail
      """
      parts = [self.recv(flags, copy=copy, track=track)]
      # have first part already, only loop while more to receive
      while self.getsockopt(zmq.RCVMORE):
          part = self.recv(flags, copy=copy, track=track)
          parts.append(part)
  
      return parts
  
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 21 for calling the Socket obj's underlying member method code with example usage: obj.recv_multipart(flags, copy, track) and returns: parts