diff options
author | Todd T. Fries <todd@cvs.openbsd.org> | 2002-02-01 18:51:45 +0000 |
---|---|---|
committer | Todd T. Fries <todd@cvs.openbsd.org> | 2002-02-01 18:51:45 +0000 |
commit | 15f6463e4e76b9a1d393ad96a66a891e29e168df (patch) | |
tree | 934e0b2b4c45fa9118fc55eec2a3eb3f71a10096 /regress/lib/libc_r | |
parent | a11a0fe9cc20035ea8df2f93542de8798d4ea4e5 (diff) |
getaddrinfo regress
Diffstat (limited to 'regress/lib/libc_r')
-rw-r--r-- | regress/lib/libc_r/getaddrinfo/Makefile | 5 | ||||
-rw-r--r-- | regress/lib/libc_r/getaddrinfo/getaddrinfo.c | 94 |
2 files changed, 99 insertions, 0 deletions
diff --git a/regress/lib/libc_r/getaddrinfo/Makefile b/regress/lib/libc_r/getaddrinfo/Makefile new file mode 100644 index 00000000000..59f66ed04ef --- /dev/null +++ b/regress/lib/libc_r/getaddrinfo/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.1 2002/02/01 18:51:44 todd Exp $ + +PROG= getaddrinfo + +.include <bsd.regress.mk> diff --git a/regress/lib/libc_r/getaddrinfo/getaddrinfo.c b/regress/lib/libc_r/getaddrinfo/getaddrinfo.c new file mode 100644 index 00000000000..1ba2e5f6e68 --- /dev/null +++ b/regress/lib/libc_r/getaddrinfo/getaddrinfo.c @@ -0,0 +1,94 @@ +/* $OpenBSD: getaddrinfo.c,v 1.1 2002/02/01 18:51:44 todd Exp $ */ + +/* + * Copyright (c) 2002 Todd T. Fries <todd@OpenBSD.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <unistd.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <pthread.h> +#include <netdb.h> +#include <resolv.h> + +#include "test.h" + +void *func(void *); +void *foo(void *); + +int +main(argc, argv) + int argc; + char **argv; +{ + pthread_t threads[10]; + char *status; + int i; + + for (i = 0; i < 2; i++) { + CHECKr(pthread_create(&threads[i], NULL, func, (void *)i)); + } + + pthread_yield(); + sleep(1); /* (ensure the thread is dead) */ + CHECKr(pthread_join(threads[i-1],(void **)&status)); + + SUCCEED; +} + +void * +func(arg) + void *arg; +{ + struct addrinfo hints, *res; + char h[NI_MAXHOST]; + int i,me = (int)arg; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_CANONNAME; + + printf("Starting thread %d\n", me ); + for(i=0;i<50;i++) { + if (getaddrinfo("www.openbsd.org", "0", &hints, &res)) + printf("error on thread %p\n", pthread_self()); + else { + getnameinfo(res->ai_addr, res->ai_addrlen, h, sizeof h, + NULL, 0, NI_NUMERICHOST); + printf("success on thread %d: %s is %s\n", + me, res->ai_canonname, h); + freeaddrinfo(res); + } + } + return NULL; +} + +void * +foo(arg) + void *arg; +{ + sleep(5); + exit(NOTOK); +} |