2009-05-29 21 views
2

SBCL 1.0.28新版本Debian的运行打破AllegroServe 1.2.47与以下错误传入的连接:AllegroServe上SBCL 1.0.28用`接受无效的关键字参数失败:AUTO-CLOSE`

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).

便携式AllegroServe页面确实提到了这个问题。但是,没有谷歌搜索出现这个问题的任何用途。

有关如何解决这个问题的任何想法,或者指向已被处理的地方的链接?

回答

2

经过一番摆弄周围,我想出了以下解决方案:

源文件后,我宣布我的包,编译/加载相应的模块,但在此之前我在包声明什么,我添加以下代码:

(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与添加到参数列表中的auto-close键电梯)

ŧ他的方式是避免修改或修补系统文件,并直接挂接到sb-bsd-sockets包中。

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

请随时评论此kludge,如果您认为这可能会以意想不到的方式影响系统的稳定性。

相关问题