From 91329580f88da2240c09b29a8072ff1535a0d5e9 Mon Sep 17 00:00:00 2001 From: Stelian Ionescu Date: Tue, 8 May 2007 02:06:55 +0200 Subject: [PATCH] Improved ENSURE-ADDRESS. Signed-off-by: Stelian Ionescu --- sockets/address.lisp | 15 ++++++++++++--- sockets/make-socket.lisp | 20 +++++++------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/sockets/address.lisp b/sockets/address.lisp index e146701..ff22864 100644 --- a/sockets/address.lisp +++ b/sockets/address.lisp @@ -263,9 +263,18 @@ (make-instance 'ipv6addr :name name)) (t (error 'invalid-address :address name :type :unknown)))) -(defun ensure-address (addr) - (if (sockaddrp addr) addr - (make-address addr))) +(defun ensure-address (addr &optional (family :internet)) + (cond ((sockaddrp addr) + (progn + (ecase family + (:internet (check-type addr inetaddr)) + (:local (check-type addr localaddr))) + (values addr))) + ((stringp addr) + (if (eql family :local) + (make-instance 'localaddr :name addr) + (make-address (vector-address-or-nil addr)))) + (t (make-address addr)))) ;;; ;;; Well-known addresses diff --git a/sockets/make-socket.lisp b/sockets/make-socket.lisp index 72d1300..5305d1a 100644 --- a/sockets/make-socket.lisp +++ b/sockets/make-socket.lisp @@ -37,11 +37,8 @@ (select-socket-type address-family type connect protocol))) (make-instance socket-class :family address-family))) -(defun open-client-socket (type address &optional port (ipv6 *ipv6*)) - (let* ((addr (ensure-address address)) - (family (etypecase addr - (inetaddr :internet) - (localaddr :local))) +(defun open-client-socket (family type address &optional port (ipv6 *ipv6*)) + (let* ((addr (ensure-address address family)) (socket (make-socket :address-family family :type type :connect :active @@ -49,13 +46,10 @@ :ipv6 ipv6))) (connect socket addr :port port))) -(defun open-server-socket (address &key +(defun open-server-socket (family address &key port reuse-address backlog (ipv6 *ipv6*)) - (let* ((addr (ensure-address address)) - (family (etypecase addr - (inetaddr :internet) - (localaddr :local))) + (let* ((addr (ensure-address address family)) (socket (make-socket :address-family family :connect :passive :protocol :default @@ -67,9 +61,9 @@ (defmacro with-socket ((var &rest args) &body body) `(with-open-stream (,var (make-socket ,@args)) ,@body)) -(defmacro with-client-socket ((var &key type address port (ipv6 nil ipv6p)) &body body) - `(with-open-stream (,var ,(if ipv6p `(open-client-socket ,type ,address ,port ,ipv6) - `(open-client-socket ,type ,address ,port))) +(defmacro with-client-socket ((var &key family type address port (ipv6 nil ipv6p)) &body body) + `(with-open-stream (,var ,(if ipv6p `(open-client-socket ,family ,type ,address ,port ,ipv6) + `(open-client-socket ,family ,type ,address ,port))) ,@body)) (defmacro with-server-socket ((var &key address port reuse-address -- 2.11.4.GIT