在XP上的Lispworks中:
CL-USER 489 > (cl+ssl:make-ssl-client-stream (cl+ssl:stream-fd *standard-output*))
我明白了:
Error: A failure in the SSL library occurred on handle #. (Return code: 1)SSL error queue: error:140C5042:SSL routines:SSL_UNDEFINED_FUNCTION:called a function you should not call
这是我做错了吗?
答案 0 :(得分:1)
这里有两种可能性。
要么你忘记调用一些你应该在制作流之前调用的初始化函数,或者在CL + SSL中有一个错误,可能只有Lispworks或Windows XP上的错误(可能是后者)。
CL + SSL测试套件运行没有任何问题吗?
编辑:刚刚在SBCL / Linux上测试了这个,同样的错误。问题必须是CL + SSL。
答案 1 :(得分:1)
此处的错误消息没有帮助。我认为这里真正的问题是CL + SSL需要一个八位字节流,而Common Lisp中的基本标准输入流是一个字符流。尝试使用八位字节流。这应该适用于Linux上的SBCL:
(let ((stdin (sb-sys:make-fd-stream 0
:input t :buffering :full
:element-type '(unsigned-byte 8)))
(cl+ssl:make-ssl-client-stream (cl+ssl:stream-fd stdin)))
这依赖于Unix将标准输入作为文件描述符0提供的事实。我不确定如何在Windows上执行这样的技巧。
对于一个真正的应用程序,你可能真的不想使用标准输入,使用usocket库就可以使用这样的东西:
(let ((sock (usocket:socket-connect host port :element-type '(unsigned-byte 8))))
(cl+ssl:make-ssl-client-stream (usocket:socket-stream sock)))