anchor.diff:               :collect
                (let ((socket-pair (car socket-pair)))
                  `(defmethod make-socket (ctx (type (eql ,(first socket-pair)))
  -                                        &rest parameters)              
  +                                        &rest parameters)
                     (change-class (make-zmq-socket ctx
                                                    ,(second socket-pair)
                                                    parameters)
  
positive.code: (defmacro with-socket ((socket context type &rest parameters)
                         &body body)
    (when (keywordp type)
      (unless (find-method #'make-socket nil `(t (eql ,type)) nil)
        (error (format nil "Incorrect socket type specified (~s)~%" type))))
    `(let ((,socket (make-socket ,context ,type ,@parameters)))
       (unwind-protect
  
negative.code:      (defgeneric (setf ,option-name) (value socket)
         ,doc)
       ,@(cond
           ((eq type :binary)
            `((defmethod (setf ,option-name) ((value string) (socket socket))
                (cffi:with-foreign-string (string value)
                  (%zmq::setsockopt (slot-value socket 'ptr) ,enum string
  