Shammer's Philosophy

My private adversaria

with-open-passive-socket ver 20120322

with-open-passive-socket 改 ver 20110709 - Shammerismで完成かと思っていたが、一部冗長なところが見つかったので改良。

(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
	      ,@main-body)
	 (unless (null ,server-symbol-value)
	   (format t "Close server socket...~%")
	   (close-server-socket ,server-symbol-value))))))

main-body は一旦バラバラにして再度リストにしていたが、こんなことはする必要なかった。