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いじってる気にしかなれない。