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

时间:2019-05-28 23:34:39

标签: lisp common-lisp ip-address sbcl

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

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

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

我正在使用文档中的默认示例,并在两行之间添加了以下几行 下面的评论 来自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)
            ;; echo the data back into the socket

            ;; echo the data back into the socket
            (describe 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插槽竟然没有绑定...

有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:1)

我在项目的回购中发现了一个问题,该问题也存在同样的问题,因此由于似乎没有明确的解决方案,因此我将结束该问题。对于我的项目,我将遵循作者的建议,即在服务之前放置一个代理。 issue