with-open-passive-socket ver 20120327 を別 package 化したら動かない
with-open-passive-socket ver 20120327 - Shammerismで完璧、と思っていたが、これを別の package にしたら動作しないことが判明。具体的には、
(make-package "SOCKET-LIB") (in-package socket-lib) (defmacro with-open-passive-socket (&rest body) (let ((server-symbol-value (caar body)) (server-listen-addr (cadar body)) (server-listen-port (caddar body)) (main-body (cdr body))) `(let ((,server-symbol-value (open-socket-server ,server-listen-addr ,server-listen-port))) (unwind-protect (when ,server-symbol-value (do () (nil) ,@main-body)) (unless (null ,server-symbol-value) (format t "Close server socket...~%") (close-server-socket ,server-symbol-value))))))
というファイルを用意し、このファイルを普通にロードしてから with-open-passive-socket を使用するというもの。パッケージ化した以外は、呼出側もwith-open-passive-socket ver 20120327 - Shammerismと同じだが、以下のようなエラーになってしまう。
> Error: Undefined function SERVER called with arguments ("0.0.0.0" 7001) . > While executing: OPEN-ECHO-SERVER-V2, in process listener(1). > Type :GO to continue, :POP to abort, :R for a list of available restarts. > If continued: Retry applying SERVER to ("0.0.0.0" 7001). > Type :? for other options. 1 >
Package を意識してマクロを書く、というのが次の課題になりそうだ。これはどうすれば解決できるのだろうか。。。