Как я могу получить адрес равноправного сокета в Lisp с помощью cl-async - PullRequest
5 голосов
/ 29 мая 2019

Я экспериментирую с cl-async с использованием SBCL, я не могу понять, как получить IP-адрес сокета, по которому я общаюсь.

Я использую SBCL 1.4.16 в gnu-linux с telent 1.9.4

Слот 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 Ответ

1 голос
/ 02 июня 2019

Я обнаружил проблему в репозитории проекта, которая представляет ту же проблему, поэтому я закрываю вопрос, поскольку, похоже, нет чистого решения. Для моего проекта я собираюсь последовать предложению автора поставить прокси перед сервисом. вопрос

...