diff options
author | Neil Jerram <neil@ossau.uklinux.net> | 2009-10-01 23:27:59 +0100 |
---|---|---|
committer | Neil Jerram <neil@ossau.uklinux.net> | 2009-10-01 23:27:59 +0100 |
commit | 1ff4da6570d17b7ce5b74b926e8f9f2c99757896 (patch) | |
tree | a5cc200821cdc6092531e7dc36054b7ecd8b4091 /libguile/socket.c | |
parent | 32bc92570eb9282e46c1b851cc65cae946547ea9 (diff) | |
download | guile-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.c | 5 |
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 = |