Shammer's Philosophy

My private adversaria

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 を意識してマクロを書く、というのが次の課題になりそうだ。これはどうすれば解決できるのだろうか。。。