From b9cfa0c15b3fe4b5d977a97229a6ae110b484515 Mon Sep 17 00:00:00 2001 From: Stelian Ionescu Date: Sun, 17 Feb 2008 02:31:26 +0100 Subject: [PATCH] Fix for FreeBSD: sendto() wants the actual size of the sockaddr_* struct it gets, instead of accepting sizeof(sockaddr_storage). Signed-off-by: Stelian Ionescu --- net.sockets/common.lisp | 7 +++++++ net.sockets/socket-methods.lisp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/net.sockets/common.lisp b/net.sockets/common.lisp index cbf508b..0d61498 100644 --- a/net.sockets/common.lisp +++ b/net.sockets/common.lisp @@ -204,6 +204,13 @@ (ipv6-address (make-sockaddr-in6 ss (address-name sockaddr) port)) (local-address (make-sockaddr-un ss (address-name sockaddr))))) +(defun sockaddr-size (ss) + (with-foreign-slots ((family) ss sockaddr-storage) + (switch (family :test #'=) + (af-inet size-of-sockaddr-in) + (af-inet6 size-of-sockaddr-in6) + (af-local size-of-sockaddr-un)))) + ;;;; Misc (defmacro check-bounds (sequence start end) diff --git a/net.sockets/socket-methods.lisp b/net.sockets/socket-methods.lisp index ee1f01e..bdf8d4c 100644 --- a/net.sockets/socket-methods.lisp +++ b/net.sockets/socket-methods.lisp @@ -410,7 +410,7 @@ (return-from %%send-to (%sendto fd buff-sap bufflen flags (if got-peer ss (null-pointer)) - (if got-peer size-of-sockaddr-storage 0))) + (if got-peer (sockaddr-size ss) 0))) (ignore () :report "Ignore this socket condition" (return-from %%send-to 0)) -- 2.11.4.GIT