Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/tests/net/net - use accept4 instead of paccept for everyone.
details: https://anonhg.NetBSD.org/src/rev/fec4d474b387
branches: trunk
changeset: 845964:fec4d474b387
user: christos <christos%NetBSD.org@localhost>
date: Sat Oct 26 23:08:27 2019 +0000
description:
- use accept4 instead of paccept for everyone.
- add test for accept preserving non-block
- comment on FreeBSD and Linux behavior.
diffstat:
tests/net/net/t_tcp.c | 154 +++++++++++++++++++++++++++++++------------------
1 files changed, 97 insertions(+), 57 deletions(-)
diffs (truncated from 323 to 300 lines):
diff -r 5479528856f3 -r fec4d474b387 tests/net/net/t_tcp.c
--- a/tests/net/net/t_tcp.c Sat Oct 26 18:36:25 2019 +0000
+++ b/tests/net/net/t_tcp.c Sat Oct 26 23:08:27 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: t_tcp.c,v 1.10 2018/02/16 22:20:18 christos Exp $ */
+/* $NetBSD: t_tcp.c,v 1.11 2019/10/26 23:08:27 christos Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -33,22 +33,27 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#define _GNU_SOURCE
+
#include <sys/cdefs.h>
#ifdef __RCSID
-__RCSID("$Id: t_tcp.c,v 1.10 2018/02/16 22:20:18 christos Exp $");
+__RCSID("$Id: t_tcp.c,v 1.11 2019/10/26 23:08:27 christos Exp $");
#endif
-/* Example code. Should block; does with accept not paccept. */
+/* Example code. Should block; does with accept not accept4_. */
/* Original by: Justin Cormack <justin%specialbusrvrervice.com@localhost> */
+
#include <sys/param.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
+#include <string.h>
#include <sched.h>
#include <stdbool.h>
#include <unistd.h>
+#include <time.h>
#include <fcntl.h>
#include <errno.h>
#include <err.h>
@@ -58,18 +63,14 @@
#include "test.h"
-#ifdef __linux__
-#define paccept(a, b, c, d, e) accept4((a), (b), (c), (e))
-#endif
-
static void
ding(int al)
{
}
static void
-paccept_block(sa_family_t sfamily, sa_family_t cfamily,
- bool pacceptblock, bool fcntlblock)
+accept_test(sa_family_t sfamily, sa_family_t cfamily,
+ bool useaccept, bool accept4_block, bool fcntlblock)
{
int srvr = -1, clnt = -1, acpt = -1;
int ok, fl;
@@ -152,9 +153,19 @@
/* may not connect first time */
ok = connect(clnt, (struct sockaddr *) &bs, addrlen);
+#ifndef __FreeBSD__
+ /* FreeBSD: What's going on here, connect succeeds with no-one
+ * accepting?
+ */
if (ok != -1 || errno != EINPROGRESS)
FAIL("expected connect to fail");
- acpt = paccept(srvr, NULL, NULL, NULL, pacceptblock ? 0 : SOCK_NONBLOCK);
+#endif
+ if (useaccept) {
+ acpt = accept(srvr, NULL, NULL);
+ } else {
+ acpt = accept4(srvr, NULL, NULL,
+ accept4_block ? 0 : SOCK_NONBLOCK);
+ }
again:
ok = connect(clnt, (struct sockaddr *) &bs, addrlen);
if (ok == -1 && errno != EISCONN) {
@@ -183,28 +194,44 @@
#endif
if (acpt == -1) { /* not true under NetBSD */
- acpt = paccept(srvr, NULL, NULL, NULL,
- pacceptblock ? 0 : SOCK_NONBLOCK);
+ if (useaccept) {
+ acpt = accept(srvr, NULL, NULL);
+ } else {
+ acpt = accept4(srvr, NULL, NULL,
+ accept4_block ? 0 : SOCK_NONBLOCK);
+ }
if (acpt == -1)
- FAIL("paccept");
+ FAIL("accept4_");
}
- /* This is supposed to only work on Unix sockets but returns garbage */
+#ifdef BSD4_4
+#ifndef __FreeBSD__
+ /* NetBSD: This is supposed to only work on Unix sockets but returns
+ * garbage
+ * FreeBSD: fails with EISCONN
+ */
+
if (getpeereid(clnt, &euid, &egid) != -1)
FAIL("getpeereid(clnt)");
- /* This is supposed to only work on Unix sockets but returns garbage */
+ /* NetBSD: This is supposed to only work on Unix sockets but returns
+ * garbage
+ * FreeBSD: fails with EISCONN
+ */
if (getpeereid(acpt, &euid, &egid) != -1)
FAIL("getpeereid(srvr)");
-
- if (fcntlblock) {
+#endif
+#endif
+ if (fcntlblock || useaccept) {
fl = fcntl(acpt, F_GETFL, 0);
if (fl == -1)
FAIL("fnctl");
+#ifndef __linux__
+ /* Linux accept returns a blocking socket */
if (fl != (O_RDWR|O_NONBLOCK))
FAIL("fl 0x%x != 0x%x\n", fl, O_RDWR|O_NONBLOCK);
ok = fcntl(acpt, F_SETFL, fl & ~O_NONBLOCK);
if (ok == -1)
FAIL("fnctl setfl");
-
+#endif
fl = fcntl(acpt, F_GETFL, 0);
if (fl & O_NONBLOCK)
FAIL("fl non blocking after reset");
@@ -216,7 +243,7 @@
alarm(1);
n = read(acpt, buf, 10);
- if (pacceptblock || fcntlblock) {
+ if (useaccept || accept4_block || fcntlblock) {
if (n == -1 && errno != EINTR)
FAIL("read");
} else {
@@ -232,17 +259,30 @@
#ifndef TEST
-ATF_TC(paccept44_reset_nonblock);
-ATF_TC_HEAD(paccept44_reset_nonblock, tc)
+ATF_TC(accept_44_preserve_nonblock);
+ATF_TC_HEAD(accept_44_preserve_nonblock, tc)
{
- atf_tc_set_md_var(tc, "descr", "Check that paccept(2) resets "
+ atf_tc_set_md_var(tc, "descr", "Check that accept(2) preserves "
"the non-blocking flag on non-blocking sockets (ipv4->ipv4)");
}
-ATF_TC_BODY(paccept44_reset_nonblock, tc)
+ATF_TC_BODY(accept_44_preserve_nonblock, tc)
+{
+ accept_test(AF_INET, AF_INET, true, false, false);
+}
+
+ATF_TC(accept4_44_reset_nonblock);
+ATF_TC_HEAD(accept4_44_reset_nonblock, tc)
{
- paccept_block(AF_INET, AF_INET, true, false);
+
+ atf_tc_set_md_var(tc, "descr", "Check that accept4(2) resets "
+ "the non-blocking flag on non-blocking sockets (ipv4->ipv4)");
+}
+
+ATF_TC_BODY(accept4_44_reset_nonblock, tc)
+{
+ accept_test(AF_INET, AF_INET, false, true, false);
}
ATF_TC(fcntl44_reset_nonblock);
@@ -255,33 +295,33 @@
ATF_TC_BODY(fcntl44_reset_nonblock, tc)
{
- paccept_block(AF_INET, AF_INET, false, true);
+ accept_test(AF_INET, AF_INET, false, false, true);
}
-ATF_TC(paccept44_nonblock);
-ATF_TC_HEAD(paccept44_nonblock, tc)
+ATF_TC(accept4_44_nonblock);
+ATF_TC_HEAD(accept4_44_nonblock, tc)
{
atf_tc_set_md_var(tc, "descr", "Check that fcntl(2) resets "
"the non-blocking flag on non-blocking sockets (ipv4->ipv4)");
}
-ATF_TC_BODY(paccept44_nonblock, tc)
+ATF_TC_BODY(accept4_44_nonblock, tc)
{
- paccept_block(AF_INET, AF_INET, false, false);
+ accept_test(AF_INET, AF_INET, false, false, false);
}
-ATF_TC(paccept66_reset_nonblock);
-ATF_TC_HEAD(paccept66_reset_nonblock, tc)
+ATF_TC(accept4_66_reset_nonblock);
+ATF_TC_HEAD(accept4_66_reset_nonblock, tc)
{
- atf_tc_set_md_var(tc, "descr", "Check that paccept(2) resets "
+ atf_tc_set_md_var(tc, "descr", "Check that accept4(2) resets "
"the non-blocking flag on non-blocking sockets (ipv6->ipv6)");
}
-ATF_TC_BODY(paccept66_reset_nonblock, tc)
+ATF_TC_BODY(accept4_66_reset_nonblock, tc)
{
- paccept_block(AF_INET6, AF_INET6, true, false);
+ accept_test(AF_INET6, AF_INET6, false, true, false);
}
ATF_TC(fcntl66_reset_nonblock);
@@ -294,33 +334,33 @@
ATF_TC_BODY(fcntl66_reset_nonblock, tc)
{
- paccept_block(AF_INET6, AF_INET6, false, true);
+ accept_test(AF_INET6, AF_INET6, false, false, true);
}
-ATF_TC(paccept66_nonblock);
-ATF_TC_HEAD(paccept66_nonblock, tc)
+ATF_TC(accept4_66_nonblock);
+ATF_TC_HEAD(accept4_66_nonblock, tc)
{
atf_tc_set_md_var(tc, "descr", "Check that fcntl(2) resets "
"the non-blocking flag on non-blocking sockets (ipv6->ipv6)");
}
-ATF_TC_BODY(paccept66_nonblock, tc)
+ATF_TC_BODY(accept4_66_nonblock, tc)
{
- paccept_block(AF_INET6, AF_INET6, false, false);
+ accept_test(AF_INET6, AF_INET6, false, false, false);
}
-ATF_TC(paccept46_reset_nonblock);
-ATF_TC_HEAD(paccept46_reset_nonblock, tc)
+ATF_TC(accept4_46_reset_nonblock);
+ATF_TC_HEAD(accept4_46_reset_nonblock, tc)
{
- atf_tc_set_md_var(tc, "descr", "Check that paccept(2) resets "
+ atf_tc_set_md_var(tc, "descr", "Check that accept4(2) resets "
"the non-blocking flag on non-blocking sockets (ipv4->ipv6)");
}
-ATF_TC_BODY(paccept46_reset_nonblock, tc)
+ATF_TC_BODY(accept4_46_reset_nonblock, tc)
{
- paccept_block(AF_INET6, AF_INET, true, false);
+ accept_test(AF_INET6, AF_INET, false, true, false);
}
ATF_TC(fcntl46_reset_nonblock);
@@ -333,42 +373,42 @@
ATF_TC_BODY(fcntl46_reset_nonblock, tc)
{
- paccept_block(AF_INET6, AF_INET, false, true);
+ accept_test(AF_INET6, AF_INET, false, false, true);
}
-ATF_TC(paccept46_nonblock);
-ATF_TC_HEAD(paccept46_nonblock, tc)
+ATF_TC(accept4_46_nonblock);
+ATF_TC_HEAD(accept4_46_nonblock, tc)
{
atf_tc_set_md_var(tc, "descr", "Check that fcntl(2) resets "
"the non-blocking flag on non-blocking sockets (ipv4->ipv6)");
}
-ATF_TC_BODY(paccept46_nonblock, tc)
+ATF_TC_BODY(accept4_46_nonblock, tc)
{
- paccept_block(AF_INET6, AF_INET, false, false);
+ accept_test(AF_INET6, AF_INET, false, false, false);
}
ATF_TP_ADD_TCS(tp)
{
- ATF_TP_ADD_TC(tp, paccept44_reset_nonblock);
+ ATF_TP_ADD_TC(tp, accept_44_preserve_nonblock);
+ ATF_TP_ADD_TC(tp, accept4_44_reset_nonblock);
ATF_TP_ADD_TC(tp, fcntl44_reset_nonblock);
- ATF_TP_ADD_TC(tp, paccept44_nonblock);
Home |
Main Index |
Thread Index |
Old Index