From: Mike G.
Subject: Lisp listener on a socket
Date: 
Message-ID: <1185475290.169732.94470@r34g2000hsd.googlegroups.com>
Is there a built-in way (with SBCL) to open a Lisp listener on a
socket?

Back when I was using CMUCL, it was common for me to just call (start-
lisp-listener), and then telnet into my running Lisp image.

(make-listener-thread) in SBCL doesn't seem to be what I want: it
wants a tty, not a socket or port #, apparently.

Is this available, or do I have to write one myself?
From: ··········@hotmail.com
Subject: Re: Lisp listener on a socket
Date: 
Message-ID: <1185517732.498693.249660@22g2000hsm.googlegroups.com>
(require :asdf)
(require :sb-bsd-sockets)
(defpackage :vimff
  (:use :cl :sb-bsd-sockets)
  (:export :start-listen))

(in-package :vimff)

(defun start-listen (ip port)
  (let ((socket (make-instance 'inet-socket :type :stream
                               :protocol :tcp)))
    (setf (sockopt-reuse-address socket) t)
    (socket-bind socket ip port)
    (socket-listen socket 1)
    (loop
      (let ((conn (socket-accept socket)))
        (format t "got new connection~%")
        (let ((s (socket-make-stream conn :element-type 'character
                                          :input t :output t
                                          :buffering :none)))
          ;(loop for line = (read-line s nil nil) while line do
          ;  (format t "Line: [~a]~%" line))
          (loop for form = (read s nil nil) while form do
            (format t "FORM: [~a]~%" form)
            (eval form))
          )
        (socket-close conn)))))