我在使用 USocket 库时遇到了一些真正令人费解的行为。考虑以下代码段:
(defvar server-socket (usocket:socket-listen "localhost" 43593
:element-type
'(unsigned-byte 8)))
(defvar client-connection (usocket:socket-accept server-socket))
;in a separate terminal, type "telnet localhost 43593".
;then type some text and hit enter.
(listen (usocket:socket-stream client-connection))
=> NIL
为什么会这样?当我:element-type '(unsigned-byte 8)
从论点中省略时usocket:socket-listen
,它工作得很好。我可以理解是否任何任意字节都不能表示为字符(例如 utf-8 编码具有无效的字节序列),但是反过来 - 不能用字节表示的字符 - 没有意义,尤其是在网络中语境。
(如果有帮助,我在 Lubuntu 15.10、USocket 0.6.3.2 上运行 clisp-2.49)。