gpt4 book ai didi

sockets - Clozure Common Lisp 中的 make-socket 错误

转载 作者:行者123 更新时间:2023-12-01 16:32:07 24 4
gpt4 key购买 nike

在 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

错误消息指出系统遇到了对带有参数 NILCCL:SOCKADDR 的调用,但不存在任何方法。所以原因是需要套接字地址但没有提供。

通过将 Emacs 与 SLIME 结合使用,您可能会发现:

  1. 堆栈上最后一次调用的跟踪:MAKE-SOCKET,调用 MAKE-TCP-SOCKET,调用 %SOCKET-CONNECT(产生错误);

  2. 每次调用中变量的值,例如在对 %SOCKET-CONNECT 的调用中,参数 SOCKET-ADDRESS 为 NIL;

  3. 所有三个函数的代码,通过检查它,您可能会发现 MAKE-TCP-SOCKET 需要套接字地址,如果没有将其作为值提供给关键参数:remote-address,通过remote-host和remote-port调用解析地址。

关于sockets - Clozure Common Lisp 中的 make-socket 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41071917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com