summaryrefslogtreecommitdiff
path: root/test/testsockets.c
diff options
context:
space:
mode:
authorDavi Arnaut <davi@apache.org>2007-06-30 13:30:24 +0000
committerDavi Arnaut <davi@apache.org>2007-06-30 13:30:24 +0000
commit3402b461e787d36f089afd6ad4133ee631e71806 (patch)
tree8e8b50c7c644d0834e416c1b5c39c8602f63aee9 /test/testsockets.c
parent827479baee87717142c2ba81c90a67d487c82add (diff)
downloadapr-3402b461e787d36f089afd6ad4133ee631e71806.tar.gz
Split the sendto_receivefrom test into two tests, one for IPv6 and one
for IPv4, and allow the tests to fail. Previously the test would fail or succeed depending on the host IPv6 connectivity (non-localhost IPv6 address) and resolver bugs (AI_ADDRCONFIG flag), which would cause the test to core dump. The AI_ADDRCONFIG flag (and loopback addresses) issue has been reported and fixed: http://sourceware.org/bugzilla/show_bug.cgi?id=4599 git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@552147 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test/testsockets.c')
-rw-r--r--test/testsockets.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/test/testsockets.c b/test/testsockets.c
index beb6d5a16..4bed66e42 100644
--- a/test/testsockets.c
+++ b/test/testsockets.c
@@ -103,7 +103,7 @@ static void udp6_socket(abts_case *tc, void *data)
#endif
}
-static void sendto_receivefrom(abts_case *tc, void *data)
+static void sendto_receivefrom_helper(abts_case *tc, const char *addr, int family)
{
apr_status_t rv;
apr_socket_t *sock = NULL;
@@ -115,28 +115,19 @@ static void sendto_receivefrom(abts_case *tc, void *data)
apr_sockaddr_t *from;
apr_sockaddr_t *to;
apr_size_t len = 30;
- int family;
- const char *addr;
-#if APR_HAVE_IPV6
- family = APR_INET6;
- addr = "::1";
rv = apr_socket_create(&sock, family, SOCK_DGRAM, 0, p);
- if (V6_NOT_ENABLED(rv)) {
-#endif
- family = APR_INET;
- addr = "127.0.0.1";
- rv = apr_socket_create(&sock, family, SOCK_DGRAM, 0, p);
-#if APR_HAVE_IPV6
- }
-#endif
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ if (rv != APR_SUCCESS)
+ return;
rv = apr_socket_create(&sock2, family, SOCK_DGRAM, 0, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ if (rv != APR_SUCCESS)
+ return;
- rv = apr_sockaddr_info_get(&to, addr, APR_UNSPEC, 7772, 0, p);
+ rv = apr_sockaddr_info_get(&to, addr, family, 7772, 0, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- rv = apr_sockaddr_info_get(&from, addr, APR_UNSPEC, 7771, 0, p);
+ rv = apr_sockaddr_info_get(&from, addr, family, 7771, 0, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
rv = apr_socket_opt_set(sock, APR_SO_REUSEADDR, 1);
@@ -147,12 +138,12 @@ static void sendto_receivefrom(abts_case *tc, void *data)
rv = apr_socket_bind(sock, to);
APR_ASSERT_SUCCESS(tc, "Could not bind socket", rv);
if (rv != APR_SUCCESS)
- return;
+ return;
rv = apr_socket_bind(sock2, from);
APR_ASSERT_SUCCESS(tc, "Could not bind second socket", rv);
if (rv != APR_SUCCESS)
- return;
+ return;
len = STRLEN;
rv = apr_socket_sendto(sock2, to, 0, sendbuf, &len);
@@ -178,6 +169,14 @@ static void sendto_receivefrom(abts_case *tc, void *data)
apr_socket_close(sock2);
}
+static void sendto_receivefrom(abts_case *tc, void *data)
+{
+#if APR_HAVE_IPV6
+ sendto_receivefrom_helper(tc, "::1", APR_INET6);
+#endif
+ sendto_receivefrom_helper(tc, "127.0.0.1", APR_INET);
+}
+
static void socket_userdata(abts_case *tc, void *data)
{
apr_socket_t *sock1, *sock2;