diff options
author | rwatson <rwatson@FreeBSD.org> | 2006-07-19 12:54:14 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2006-07-19 12:54:14 +0000 |
commit | 8ccc47a9639561baf5238e6cbd89c5c4edf50aae (patch) | |
tree | c767233192144467d6609020c3c1d82adc5001f4 /tools/regression/netinet6 | |
parent | 42d0cba86a1a7fe03fe876b9052eeae29c31ea05 (diff) | |
download | FreeBSD-src-8ccc47a9639561baf5238e6cbd89c5c4edf50aae.zip FreeBSD-src-8ccc47a9639561baf5238e6cbd89c5c4edf50aae.tar.gz |
Add a test case for closing a UDPv6 socket that has been connected to
the IPv6 loopback address.
Warns ?= 2.
Diffstat (limited to 'tools/regression/netinet6')
-rw-r--r-- | tools/regression/netinet6/ip6_sockets/Makefile | 1 | ||||
-rw-r--r-- | tools/regression/netinet6/ip6_sockets/ip6_sockets.c | 29 |
2 files changed, 30 insertions, 0 deletions
diff --git a/tools/regression/netinet6/ip6_sockets/Makefile b/tools/regression/netinet6/ip6_sockets/Makefile index 2025e6a..4f6bc78 100644 --- a/tools/regression/netinet6/ip6_sockets/Makefile +++ b/tools/regression/netinet6/ip6_sockets/Makefile @@ -4,5 +4,6 @@ PROG= ip6_sockets NO_MAN= +WARNS?= 2 .include <bsd.prog.mk> diff --git a/tools/regression/netinet6/ip6_sockets/ip6_sockets.c b/tools/regression/netinet6/ip6_sockets/ip6_sockets.c index a3310dd..07e6209 100644 --- a/tools/regression/netinet6/ip6_sockets/ip6_sockets.c +++ b/tools/regression/netinet6/ip6_sockets/ip6_sockets.c @@ -28,7 +28,10 @@ #include <sys/socket.h> +#include <netinet/in.h> + #include <err.h> +#include <string.h> #include <unistd.h> /* @@ -38,18 +41,44 @@ int main(int argc, char *argv[]) { + struct sockaddr_in6 sin6; int s; + /* + * UDPv6 simple test. + */ + s = socket(PF_INET6, SOCK_DGRAM, 0); + if (s < 0) + err(-1, "socket(PF_INET6, SOCK_DGRAM, 0)"); + close(s); + + /* + * UDPv6 connected case -- connect UDPv6 to an arbitrary port so that + * when we close the socket, it goes through the disconnect logic. + */ s = socket(PF_INET6, SOCK_DGRAM, 0); if (s < 0) err(-1, "socket(PF_INET6, SOCK_DGRAM, 0)"); + bzero(&sin6, sizeof(sin6)); + sin6.sin6_len = sizeof(sin6); + sin6.sin6_family = AF_INET6; + sin6.sin6_addr = in6addr_loopback; + sin6.sin6_port = htons(1024); + if (connect(s, (struct sockaddr *)&sin6, sizeof(sin6)) < 0) + err(-1, "connect(SOCK_DGRAM, ::1)"); close(s); + /* + * TCPv6. + */ s = socket(PF_INET6, SOCK_STREAM, 0); if (s < 0) err(-1, "socket(PF_INET6, SOCK_STREAM, 0)"); close(s); + /* + * Raw IPv6. + */ s = socket(PF_INET6, SOCK_RAW, 0); if (s < 0) err(-1, "socket(PF_INET6, SOCK_RAW, 0)"); |