Lisp SBCL 1.0.28上的AllegroServe因“接受无效关键字参数::自动关闭”而失败`

Lisp SBCL 1.0.28上的AllegroServe因“接受无效关键字参数::自动关闭”而失败`,lisp,sbcl,Lisp,Sbcl,在debian上运行的新版本SBCL 1.0.28在传入连接时中断AllegroServe 1.2.47,并出现以下错误: aserve-accept-6: 05/26/09 - 21:11:01 - accept: error 0 on accept invalid keyword argument: :AUTO-CLOSE (valid keys are :INPUT, :OUTPUT,

在debian上运行的新版本SBCL 1.0.28在传入连接时中断AllegroServe 1.2.47,并出现以下错误:

aserve-accept-6: 05/26/09 - 21:11:01 - accept: error 0 on accept invalid keyword argument: :AUTO-CLOSE (valid keys are :INPUT, :OUTPUT, :ELEMENT-TYPE, :EXTERNAL-FORMAT, :BUFFERING, :TIMEOUT). aserve-accept-6:05/26/09-21:11:01-接受:接受无效时出现错误0 关键字参数::自动关闭(有效键为 :输入,:输出,:元素类型,:外部格式, :缓冲,:超时)。 Portable AllegroServe页面确实提到了这个问题。然而,谷歌搜索没有发现对这个问题有用的东西


关于如何解决这个问题,或者指向已解决问题的地方的链接,有什么想法吗?

经过一番努力,我想出了以下解决方案:

my源文件中,在声明包之后,编译/加载适当的模块,但在声明包中的任何内容之前,我添加了以下代码:

(defmethod sb-bsd-sockets:socket-make-stream ((socket sb-bsd-sockets:socket)
                               &key input output
                               (element-type 'character)
                               (buffering :full)
                               (external-format :default)
                               timeout
                       (auto-close t))
  "Default method for SOCKET objects.  An ELEMENT-TYPE of :DEFAULT
will construct a bivalent stream.  Acceptable values for BUFFERING
are :FULL, :LINE and :NONE.  Streams will have no TIMEOUT
by default.
  The stream for SOCKET will be cached, and a second invocation of this
method will return the same stream.  This may lead to oddities if this
function is invoked with inconsistent arguments \(e.g., one might request
an input stream and get an output stream in response\)."
  (let ((stream
         (and (slot-boundp socket 'stream) (slot-value socket 'stream))))
    (unless stream
      (setf stream (sb-sys:make-fd-stream
                    (sb-bsd-sockets:socket-file-descriptor socket)
                    :name "a socket"
                    :dual-channel-p t
                    :input input
                    :output output
                    :element-type element-type
                    :buffering buffering
                    :external-format external-format
                    :timeout timeout
            :auto-close auto-close)))
      (setf (slot-value socket 'stream) stream)
    (sb-ext:cancel-finalization socket)
    stream))
(它基本上是从
sb bsd sockets/socket.lisp中的内容提升而来,并将
自动关闭
键添加到参数列表中)

这样我就避免了修改或修补系统文件,基本上直接挂接到sbbsdsockets包中

到目前为止,它似乎正在发挥应有的作用。通过连续调用
(room)
进行的基本测试表明,没有明显的内存泄漏,性能符合预期

如果您认为这可能会以意想不到的方式影响我的系统的稳定性,请随时对这个乱七八糟的问题发表评论