Lisp Condition Level 1
コンディション超入門 - Shammerismの続き。with-open-socket で試した。サンプルコードは以下のような感じで、意図的に同一ポートの Socket を Open してみる。
(defun open-http-server (listen-addr listen-port) (let ((host listen-addr) (port listen-port)) (when (null host) (setf host "0.0.0.0")) (when (null port) (setf port "10080")) (handler-case (with-open-socket (server :type :stream :connect :passive :local-host host :local-port (parse-integer port)) (format t "> Started My Server...~%") (loop (let ((client (accept-connection server))) (process-run-function "Handle Client Socket" 'handle-client client)))) (error (c) (progn (format t "~A~%" (type-of c)) (format t "~A~%" c))))))
handler-case の次の括弧で本体の処理を行い、その括弧の次に error のブロックを作成。この関数を二度実行すると、以下のような結果になる。
SOCKET-CREATION-ERROR Address already in use (error #48) during socket creation operation in bind