SBCLでプロセス間通信

会社でとんでもないことが発生していたのでずいぶん間が空いた。
まぁ、だれも読んでないからいい。

とりあえずサーバ側
面倒だからインデントも整形しない。

(require :sb-bsd-sockets)

(defpackage "SBCL-FAST-CGI"
(:use "COMMON-LISP" "SB-BSD-SOCKETS")
(:export "START-LISTEN"))

(intern "MY-KEYWORD" "KEYWORD")

(in-package SBCL-FAST-CGI)

(defun start-listen()
(let ((soc (make-instance 'local-socket :type :stream)))
(unwind-protect
(progn 
(socket-bind soc "af_unix_test")
(socket-listen soc 100)
(multiple-value-bind (s endp) (socket-accept soc)
(progn 
(format t "addr ~A~%" endp)
(format t "socket ~A~%" s)
(let* ((data (make-array 100 :element-type 'character :initial-element #\ ))
(len (length data)))
(multiple-value-bind (data len ep port) (socket-receive s data len)
(progn
(format t "data ~A~%" data)))))))
(progn
(format t "end~%")
(socket-close soc)
(sb-posix:unlink "af_unix_test")))))

(start-listen)

でクライアント側

(require :sb-bsd-sockets)

(defpackage "TEST"
(:use "COMMON-LISP" "SB-BSD-SOCKETS"))

(in-package TEST)

(defun start()
(let ((soc (make-instance 'local-socket :type :stream)))
(unwind-protect
(progn 
(let ((str (read)))
(socket-connect soc "af_unix_test")
(socket-send soc str (1+ (length str)))))
(socket-close soc))))

(start)

で動いた
んーー。ただたんにSocketいじってる気にしかなれない。