lisp - 我如何使用 cl-async 在 Lisp 中检索套接字对等方的地址

标签 lisp common-lisp ip-address sbcl

我正在使用 SBCL 试验 cl-async,我不知道如何检索 我正在通信的套接字的 IP 地址。

我在带有 telent 1.9.4 的 gnu-linux 上使用 SBCL 1.4.16

套接字对象中的 ADDRESS 插槽似乎未绑定(bind),我尝试从较低级别的 libuv 绑定(bind)中提取失败

我正在使用文档中的默认示例,并添加了行 下面的评论 来自 http://orthecreedence.github.io/cl-async/examples

(defun my-echo-server ()
    (format t "Starting server.~%")
    (as:tcp-server nil 9003  ; nil is "0.0.0.0"
        (lambda (socket data)
            (describe socket)
            ;; echo the data back into the socket
           (as:write-socket-data socket data))
        (lambda (err) (format t "listener event: ~a~%" err)))
  ;; catch sigint
  (as:signal-handler 2 (lambda (sig) (declare (ignore sig)) (as:exit-event-loop))))

(as:start-event-loop #'my-echo-server)

当我使用 netcat 或 telnet 连接并发送内容时,输出是:

#<CL-ASYNC:TCP-SOCKET {1004DC0BF3}>
  [standard-object]

Slots with :INSTANCE allocation:
  C                              = #.(SB-SYS:INT-SAP #X7F3EEC021490)
  DATA                           = NIL
  CLOSED                         = NIL
  DRAIN-READ-BUFFER              = T
  ADDRESS                        = #<unbound slot>
  BUFFER                         = #S(FAST-IO:OUTPUT-BUFFER..
  BUFFERINGP                     = NIL
  CONNECTED                      = T
  DIRECTION                      = :IN

ADDRESS 插槽出人意料地未绑定(bind)...

有人遇到过这个问题吗?

最佳答案

我在项目的 repo 上发现了一个存在同样问题的问题,所以我关闭了这个问题,因为似乎没有干净的解决方案。对于我的项目,我将遵循作者的建议,在服务前面放置一个代理。 issue

关于lisp - 我如何使用 cl-async 在 Lisp 中检索套接字对等方的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351277/

相关文章:

syntax - Common Lisp 宏语法关键字 : what do I even call this?

generics - 专门针对关键字的泛型函数

lisp - "Cons"在 Lisp 中如何工作?

emacs - Emacs 中的 eval 命令到其他缓冲区

lambda - Common Lisp 中数值函数的近似导数和二阶导数 - 未按预期工作

arrays - 如何创建特定类型的通用 lisp (SBCL) 向量以在 usocket 中使用?

lisp - 如何在Lisp中的函数内全局更改变量值

browser - 在 Vaadin 14 应用程序的服务器端通过 Java 获取用户 Web 浏览器的 IP 地址

c# - 从IPv4中的(非本地)IP地址获取MAC地址的最简单方法

networking - 在同一Intranet上区分两台计算机