anchor.diff:    (check-type family (member :internet :local :ipv4 :ipv6) "one of :INTERNET, :LOCAL, :IPV4 or :IPV6")
     (check-type type (member :stream :datagram) "either :STREAM or :DATAGRAM")
     (check-type connect (member :active :passive) "either :ACTIVE or :PASSIVE")
  -  (dolist (key '(:ipv6 :external-format :type :connect))
  +  (dolist (key '(:family :type :connect :external-format :ipv6))
       (remf args key))
  -  (let ((*ipv6* (case family
  -                  (:ipv4 nil)
  -                  (:ipv6 (or ipv6 t))
  -                  (t     t)))
  -        (address-family (if (or (eq family :ipv4) (eq family :ipv6))
  -                            :internet
  -                            family)))
  -    (cond
  -      ((and (eq address-family :internet) (eq type :stream))
  -       (%make-internet-stream-socket args connect external-format))
  -      ((and (eq address-family :local) (eq type :stream))
  -       (%make-local-stream-socket args connect external-format))
  -      ((and (eq address-family :internet) (eq type :datagram))
  -       (%make-internet-datagram-socket args external-format))
  -      ((and (eq address-family :local) (eq type :datagram))
  -       (%make-local-datagram-socket args external-format)))))
  +  (case family
  +    (:internet (setf family (if ipv6 :ipv6 :ipv4)))
  +    (:ipv4     (setf ipv6 nil)))
  +  (let ((*ipv6* ipv6))
  +    (multiple-value-case (family type connect)
  +      (((:ipv4 :ipv6) :stream :active)
  +       (%make-internet-stream-active-socket args family external-format))
  +      (((:ipv4 :ipv6) :stream :passive)
  +       (%make-internet-stream-passive-socket args family external-format))
  +      ((:local :stream :active)
  +       (%make-local-stream-active-socket args :local external-format))
  +      ((:local :stream :passive)
  +       (%make-local-stream-passive-socket args :local external-format))
  +      (((:ipv4 :ipv6) :datagram)
  +       (%make-internet-datagram-socket args family external-format))
  +      ((:local :datagram)
  +       (%make-local-datagram-socket args :local external-format)))))
   
   (defmacro with-open-socket ((var &rest args) &body body)
     "VAR is bound to a socket created by passing ARGS to
  
positive.code:           (connect socket (convert-or-lookup-inet-address remote-host)
                     :port remote-port))))))
  
  (defun %make-local-datagram-socket (args ef)
    (destructuring-bind (&key family local-filename remote-filename) args
      (%with-close-on-error (socket (create-socket :family family :type :datagram
                                                   :connect :active :external-format ef))
        (when local-filename
          (bind-address socket (ensure-address local-filename :local)))
        (when remote-filename
  
negative.code: 
  (in-package :net.sockets)
  
  (defun create-socket (family type connect external-format)
    (make-instance (select-socket-class family type connect :default)
                   :family family
                   :external-format external-format))
  
  (defmacro %with-close-on-error ((var value) &body body)
    "Bind VAR to VALUE, execute BODY as implicit PROGN and return VAR.
  