summaryrefslogtreecommitdiff
path: root/libguile/socket.c
diff options
context:
space:
mode:
authorNeil Jerram <neil@ossau.uklinux.net>2009-10-01 23:27:59 +0100
committerNeil Jerram <neil@ossau.uklinux.net>2009-10-01 23:27:59 +0100
commit1ff4da6570d17b7ce5b74b926e8f9f2c99757896 (patch)
treea5cc200821cdc6092531e7dc36054b7ecd8b4091 /libguile/socket.c
parent32bc92570eb9282e46c1b851cc65cae946547ea9 (diff)
downloadguile-1ff4da6570d17b7ce5b74b926e8f9f2c99757896.tar.gz
Fix handling of IPv6 addresses
Thanks to Scott McPeak for reporting this and providing a patch. * libguile/socket.c (scm_to_ipv6): When address is the wrong type, provide more information in the exception message. (scm_to_sockaddr): scm_to_ipv6 expects just an address, not the whole vector. * test-suite/tests/socket.test ("AF_INET6/SOCK_STREAM"): New set of tests.
Diffstat (limited to 'libguile/socket.c')
-rw-r--r--libguile/socket.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libguile/socket.c b/libguile/socket.c
index 3a81ed9d0..057470770 100644
--- a/libguile/socket.c
+++ b/libguile/socket.c
@@ -349,7 +349,7 @@ scm_to_ipv6 (scm_t_uint8 dst[16], SCM src)
scm_remember_upto_here_1 (src);
}
else
- scm_wrong_type_arg (NULL, 0, src);
+ scm_wrong_type_arg_msg ("scm_to_ipv6", 0, src, "integer");
}
#ifdef HAVE_INET_PTON
@@ -1169,7 +1169,8 @@ scm_to_sockaddr (SCM address, size_t *address_size)
{
struct sockaddr_in6 c_inet6;
- scm_to_ipv6 (c_inet6.sin6_addr.s6_addr, address);
+ scm_to_ipv6 (c_inet6.sin6_addr.s6_addr,
+ SCM_SIMPLE_VECTOR_REF (address, 1));
c_inet6.sin6_port =
htons (scm_to_ushort (SCM_SIMPLE_VECTOR_REF (address, 2)));
c_inet6.sin6_flowinfo =