code: def recv(self, picture, *args):
          
          return lib.zsock_recv(self._as_parameter_, picture, *args)
docs: Receive a 'picture' message to the socket (or actor). See zsock_send for
  the format and meaning of the picture. Returns the picture elements into
  a series of pointers as provided by the caller:
  
      i = int * (stores signed integer)
      4 = uint32_t * (stores 32-bit unsigned integer)
      8 = uint64_t * (stores 64-bit unsigned integer)
      s = char ** (allocates new string)
      b = byte **, size_t * (2 arguments) (allocates memory)
      c = zchunk_t ** (creates zchunk)
      f = zframe_t ** (creates zframe)
      U = zuuid_t * (creates a zuuid with the data)
      h = zhashx_t ** (creates zhashx)
      p = void ** (stores pointer)
      m = zmsg_t ** (creates a zmsg with the remaining frames)
      z = null, asserts empty frame (0 arguments)
      u = uint * (stores unsigned integer, deprecated)
  
  Note that zsock_recv creates the returned objects, and the caller must
  destroy them when finished with them. The supplied pointers do not need
  to be initialized. Returns 0 if successful, or -1 if it failed to recv
  a message, in which case the pointers are not modified. When message
  frames are truncated (a short message), sets return values to zero/null.
  If an argument pointer is NULL, does not store any value (skips it).
  An 'n' picture matches an empty frame; if the message does not match,
  the method will return -1.