From e356044a501b3f9976786fe7fae91cd103040a52 Mon Sep 17 00:00:00 2001 From: Stelian Ionescu Date: Wed, 20 Jun 2007 22:27:24 +0200 Subject: [PATCH] Added WITH-SOCKADDR-{IN,IN6,UN} macros. Signed-off-by: Stelian Ionescu --- sockets/common.lisp | 21 ++++++++++++++++++--- sockets/socket-methods.lisp | 18 ++++++------------ 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/sockets/common.lisp b/sockets/common.lisp index 9e720b5..3c0e450 100644 --- a/sockets/common.lisp +++ b/sockets/common.lisp @@ -121,7 +121,12 @@ (setf et:family et:af-inet) (setf et:addr (htonl (vector-to-ipaddr ub8-vector))) (setf et:port (htons port))) - sin) + (values sin)) + +(defmacro with-sockaddr-in ((var address &optional port) &body body) + `(with-foreign-object (,var 'et:sockaddr-in) + (make-sockaddr-in ,var ,address ,port) + ,@body)) (defun make-sockaddr-in6 (sin6 ub16-vector &optional (port 0)) (declare (type ipv6-array ub16-vector) @@ -131,7 +136,12 @@ (setf et:family et:af-inet6) (copy-simple-array-ub16-to-alien-vector ub16-vector et:addr) (setf et:port (htons port))) - sin6) + (values sin6)) + +(defmacro with-sockaddr-in6 ((var address &optional port) &body body) + `(with-foreign-object (,var 'et:sockaddr-in6) + (make-sockaddr-in6 ,var ,address ,port) + ,@body)) (defun make-sockaddr-un (sun string) (declare (type string string)) @@ -143,7 +153,12 @@ :for off :below (1- et:unix-path-max) :do (setf (mem-aref et:path :uint8 off) (mem-aref c-string :uint8 off))))) - sun) + (values sun)) + +(defmacro with-sockaddr-un ((var address) &body body) + `(with-foreign-object (,var 'et:sockaddr-un) + (make-sockaddr-un ,var ,address) + ,@body)) ;;; ;;; Conversion functions for SOCKADDR_* structs diff --git a/sockets/socket-methods.lisp b/sockets/socket-methods.lisp index e33bc57..9140aaa 100644 --- a/sockets/socket-methods.lisp +++ b/sockets/socket-methods.lisp @@ -286,14 +286,12 @@ (set-socket-option socket :reuse-address :value t))) (defun bind-ipv4-address (fd address port) - (with-foreign-object (sin 'et:sockaddr-in) - (make-sockaddr-in sin address port) + (with-sockaddr-in (sin address port) (with-socket-error-filter (et:bind fd sin et:size-of-sockaddr-in)))) (defun bind-ipv6-address (fd address port) - (with-foreign-object (sin6 'et:sockaddr-in6) - (make-sockaddr-in6 sin6 address port) + (with-sockaddr-in6 (sin6 address port) (with-socket-error-filter (et:bind fd sin6 et:size-of-sockaddr-in6)))) @@ -315,8 +313,7 @@ (defmethod bind-address ((socket local-socket) (address localaddr) &key) - (with-foreign-object (sun 'et:sockaddr-un) - (make-sockaddr-un sun (name address)) + (with-sockaddr-un (sun (name address)) (with-socket-error-filter (et:bind (fd-of socket) sun et:size-of-sockaddr-un))) (values socket)) @@ -387,14 +384,12 @@ (set-socket-option socket :no-sigpipe :value t))) (defun ipv4-connect (fd address port) - (with-foreign-object (sin 'et:sockaddr-in) - (make-sockaddr-in sin address port) + (with-sockaddr-in (sin address port) (with-socket-error-filter (et:connect fd sin et:size-of-sockaddr-in)))) (defun ipv6-connect (fd address port) - (with-foreign-object (sin6 'et:sockaddr-in6) - (make-sockaddr-in6 sin6 address port) + (with-sockaddr-in6 (sin6 address port) (with-socket-error-filter (et:connect fd sin6 et:size-of-sockaddr-in6)))) @@ -414,8 +409,7 @@ (defmethod connect ((socket local-socket) (address localaddr) &key) - (with-foreign-object (sun 'et:sockaddr-un) - (make-sockaddr-un sun (name address)) + (with-sockaddr-un (sun (name address)) (with-socket-error-filter (et:connect (fd-of socket) sun et:size-of-sockaddr-un))) (values socket)) -- 2.11.4.GIT