with-open-passive-socket ver 20120322 を試す
with-open-passive-socket ver 20120322 - Shammerismで作成した Echo Server で使ってみることに。
(defun open-echo-server (addr port) (format t "> OpenEchoServer port open...~%") (with-open-passive-socket (server addr port) (do () (nil) (let ((client (accept-client-socket server))) (unwind-protect (let ((receive-buffer (make-array 0 :fill-pointer 0 :adjustable t :element-type '(unsigned-byte 8)))) (do () (nil) (let ((b (read-byte client nil 'eof))) (cond ((eql 'eof b) (return)) (t (vector-push-extend b receive-buffer))) (format t "~A " b) (when (equal b 10) (return)))) (let ((received-message (decode-string-from-octets receive-buffer :external-format :utf-8))) (format t "~A~%" received-message) (when (string-equal received-message "quit") (format t "received quit...~%") (quit)))) (progn (format t "Close client...~%") (close-client-socket client))))))) (open-echo-server "0.0.0.0" 7001)
期待通りに動作しているように見える。今度検討するとしたら、handler-case も組み込むことだろうか。Lisp 使いとして自信を持てるようになるまで、まだまだ覚えないといけないことが山程ある。。。