anchor.diff:  (defun finish-close (socket)
     (when-let (evbase (and (slot-boundp socket 'internal-socket)
                            (socket-event-base socket)))
  -    (iolib:remove-fd-handlers evbase
  -                             (iolib:socket-os-fd (socket-internal-socket socket))
  -                             :write t)
  +    (pause-writes socket)
       (when-let (server (socket-server socket))
         (remhash socket (server-connections server)))
       (close (socket-internal-socket socket) :abort t)
  
positive.code: 
  ;;; Reading
  (defun socket-paused-p (socket)
    (iolib.multiplex::fd-monitored-p (socket-event-base socket)
                                     (iolib:socket-os-fd (socket-internal-socket socket))
                                     :read))
  
  (defun socket-pause (socket &key timeout)
    (iolib:remove-fd-handlers (socket-event-base socket)
                              (iolib:socket-os-fd (socket-internal-socket socket))
                              :read t)
    (when timeout
      (add-timer (curry #'socket-resume socket) timeout :one-shot t)))
  
  (defun socket-resume (socket)
    (iolib:set-io-handler (socket-event-base socket)
                          (iolib:socket-os-fd (socket-internal-socket socket))
                          :read (lambda (&rest ig)
                                  (declare (ignore ig))
                                  ;; NOTE - The redundant errors are there for reference.
                                  (handler-bind (((or iolib:socket-connection-reset-error
                                                      end-of-file
                                                      error)
                                                  (lambda (e)
                                                    (on-socket-error (socket-driver socket) socket e))))
                                    (restart-case
                                        (let* ((buffer (socket-read-buffer socket))
                                               (bytes-read
                                                (nth-value
                                                 1 (iolib:receive-from (socket-internal-socket socket) :buffer buffer))))
                                          (when (zerop bytes-read)
                                            (error 'end-of-file))
                                          (incf (socket-bytes-read socket) bytes-read)
                                          (let ((data (if (socket-binary-p socket)
                                                          (subseq buffer 0 bytes-read)
                                                          (flex:octets-to-string buffer
                                                                                 :start 0
                                                                                 :end bytes-read
                                                                                 :external-format (socket-external-format-in socket)))))
                                            (on-socket-data (socket-driver socket) socket data)))
                                      (continue () nil)
                                      (drop-connection () (close socket :abort t)))))))
  
  ;;; Writing
  (defun content->buffer (socket content)
  
negative.code:    (external-format-in :initarg :external-format-in :reader socket-external-format-in)
     (external-format-out :initarg :external-format-out :reader socket-external-format-out)
     (binary-p :initarg :binaryp :accessor socket-binary-p)
     (close-after-drain-p :initform nil :accessor socket-close-after-drain-p)
     (readingp :initform nil :accessor socket-reading-p)
     (writingp :initform nil :accessor socket-writing-p)))
  (defun make-socket (driver &key
                      (buffer-size *max-buffer-size*)
                      (external-format-in *default-external-format*)
  