Clozure Common Lisp 中的 make-socket 错误
make-socket error in Clozure Common Lisp
在 CCL 顶层,运行:
(make-socket :LOCAL-PORT 6666 :LOCAL-HOST "127.0.0.1")
或
(make-socket :LOCAL-PORT 6666 :LOCAL-HOST (lookup-hostname "localhost"))
输出如下:
> Error: There is no applicable method for the generic function:
> #<STANDARD-GENERIC-FUNCTION CCL::SOCKADDR #x30200043F91F>
> when called with arguments:
> (NIL)
> While executing: #<CCL::STANDARD-KERNEL-METHOD NO-APPLICABLE-METHOD (T)>, in process listener(1).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: Try calling it again
> Type :? for other options.
我无法理解错误(CL 的新手)。这是什么意思?
我做错了什么?
您的代码中的问题是提供给 MAKE-SOCKET
的关键参数需要创建主动 TCP 套接字,而不是被动套接字(侦听器套接字),正如您在评论中指定的那样。这是因为,默认情况下,指定套接字是主动还是被动的键 :connect
被分配值 :active
.
错误消息指定系统遇到了对 CCL:SOCKADDR
的调用,参数为 NIL
,不存在任何方法。所以原因是需要套接字地址,但提供了 none。
通过将 Emacs 与 SLIME 结合使用,您可能会发现:
堆栈上最后调用的跟踪:MAKE-SOCKET,调用 MAKE-TCP-SOCKET,调用 %SOCKET-CONNECT(产生错误);
每次调用中变量的值,例如在对 %SOCKET-CONNECT 的调用中,参数 SOCKET-ADDRESS 为 NIL;
所有三个函数的代码,通过检查它你会发现 MAKE-TCP-SOCKET
需要一个套接字地址,如果它没有作为关键参数的值提供:远程地址,使用远程主机和远程端口调用解析地址。
在 CCL 顶层,运行:
(make-socket :LOCAL-PORT 6666 :LOCAL-HOST "127.0.0.1")
或
(make-socket :LOCAL-PORT 6666 :LOCAL-HOST (lookup-hostname "localhost"))
输出如下:
> Error: There is no applicable method for the generic function:
> #<STANDARD-GENERIC-FUNCTION CCL::SOCKADDR #x30200043F91F>
> when called with arguments:
> (NIL)
> While executing: #<CCL::STANDARD-KERNEL-METHOD NO-APPLICABLE-METHOD (T)>, in process listener(1).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: Try calling it again
> Type :? for other options.
我无法理解错误(CL 的新手)。这是什么意思? 我做错了什么?
您的代码中的问题是提供给 MAKE-SOCKET
的关键参数需要创建主动 TCP 套接字,而不是被动套接字(侦听器套接字),正如您在评论中指定的那样。这是因为,默认情况下,指定套接字是主动还是被动的键 :connect
被分配值 :active
.
错误消息指定系统遇到了对 CCL:SOCKADDR
的调用,参数为 NIL
,不存在任何方法。所以原因是需要套接字地址,但提供了 none。
通过将 Emacs 与 SLIME 结合使用,您可能会发现:
堆栈上最后调用的跟踪:MAKE-SOCKET,调用 MAKE-TCP-SOCKET,调用 %SOCKET-CONNECT(产生错误);
每次调用中变量的值,例如在对 %SOCKET-CONNECT 的调用中,参数 SOCKET-ADDRESS 为 NIL;
所有三个函数的代码,通过检查它你会发现
MAKE-TCP-SOCKET
需要一个套接字地址,如果它没有作为关键参数的值提供:远程地址,使用远程主机和远程端口调用解析地址。