annotate tests/test-select.h @ 16935:498a2211d839

Write "Mac OS X" instead of "MacOS X". * README: Write "Mac OS X" instead of "MacOS X". * build-aux/bootstrap: Likewise. * build-aux/install-reloc: Likewise. * lib/acl-internal.h: Likewise. * lib/acl_entries.c: Likewise. * lib/argp-ba.c: Likewise. * lib/argp-pv.c: Likewise. * lib/config.charset: Likewise. * lib/copy-acl.c: Likewise. * lib/csharpexec.c: Likewise. * lib/euidaccess.c: Likewise. * lib/fbufmode.c: Likewise. * lib/fflush.c: Likewise. * lib/file-has-acl.c: Likewise. * lib/filemode.h: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fsusage.c: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.c: Likewise. * lib/get-rusage-as.c: Likewise. * lib/get-rusage-data.c: Likewise. * lib/getdomainname.c: Likewise. * lib/idpriv-drop.c: Likewise. * lib/idpriv-droptemp.c: Likewise. * lib/localcharset.c: Likewise. * lib/locale.in.h: Likewise. * lib/localename.c: Likewise. * lib/mbsrtowcs-state.c: Likewise. * lib/nproc.c: Likewise. * lib/passfd.c: Likewise. * lib/posix_openpt.c: Likewise. * lib/printf-parse.c: Likewise. * lib/progreloc.c: Likewise. * lib/safe-read.h: Likewise. * lib/safe-write.h: Likewise. * lib/sched.in.h: Likewise. * lib/set-mode-acl.c: Likewise. * lib/signal.in.h: Likewise. * lib/stdint.in.h: Likewise. * lib/stdio-impl.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/strtod.c: Likewise. * lib/sys_select.in.h: Likewise. * lib/tcgetsid.c: Likewise. * lib/unistd.in.h: Likewise. * lib/unlockpt.c: Likewise. * lib/vasnprintf.c: Likewise. * lib/vma-iter.c: Likewise. * lib/wcsrtombs-state.c: Likewise. * m4/acl.m4: Likewise. * m4/acosl.m4: Likewise. * m4/asinl.m4: Likewise. * m4/atanl.m4: Likewise. * m4/c-stack.m4: Likewise. * m4/cosl.m4: Likewise. * m4/expl.m4: Likewise. * m4/extensions.m4: Likewise. * m4/fdatasync.m4: Likewise. * m4/fmal.m4: Likewise. * m4/frexp.m4: Likewise. * m4/frexpf.m4: Likewise. * m4/frexpl.m4: Likewise. * m4/fsusage.m4: Likewise. * m4/getdomainname.m4: Likewise. * m4/getloadavg.m4: Likewise. * m4/getopt.m4: Likewise. * m4/gettext.m4: Likewise. * m4/gnulib-common.m4: Likewise. * m4/intdiv0.m4: Likewise. * m4/intlmacosx.m4: Likewise. * m4/largefile.m4: Likewise. * m4/ldexpl.m4: Likewise. * m4/link-follow.m4: Likewise. * m4/locale-ar.m4: Likewise. * m4/locale-fr.m4: Likewise. * m4/locale-ja.m4: Likewise. * m4/locale-tr.m4: Likewise. * m4/locale-zh.m4: Likewise. * m4/locale_h.m4: Likewise. * m4/lock.m4: Likewise. * m4/logl.m4: Likewise. * m4/mathfunc.m4: Likewise. * m4/minus-zero.m4: Likewise. * m4/mktime.m4: Likewise. * m4/mmap-anon.m4: Likewise. * m4/multiarch.m4: Likewise. * m4/nanosleep.m4: Likewise. * m4/nocrash.m4: Likewise. * m4/poll.m4: Likewise. * m4/printf-frexpl.m4: Likewise. * m4/printf.m4: Likewise. * m4/signbit.m4: Likewise. * m4/sinl.m4: Likewise. * m4/sqrtl.m4: Likewise. * m4/strerror_r.m4: Likewise. * m4/tanl.m4: Likewise. * m4/threadlib.m4: Likewise. * m4/ttyname_r.m4: Likewise. * m4/unlink.m4: Likewise. * m4/visibility.m4: Likewise. * m4/wcwidth.m4: Likewise. * tests/minus-zero.h: Likewise. * tests/test-alloca-opt.c: Likewise. * tests/test-copy-acl.sh: Likewise. * tests/test-copy-file.sh: Likewise. * tests/test-fdatasync.c: Likewise. * tests/test-file-has-acl.sh: Likewise. * tests/test-flock.c: Likewise. * tests/test-fsync.c: Likewise. * tests/test-localename.c: Likewise. * tests/test-malloca.c: Likewise. * tests/test-nonblocking-pipe.h: Likewise. * tests/test-nonblocking-socket.h: Likewise. * tests/test-openpty.c: Likewise. * tests/test-posix_openpt.c: Likewise. * tests/test-ptsname.c: Likewise. * tests/test-ptsname_r.c: Likewise. * tests/test-sameacls.c: Likewise. * tests/test-select.h: Likewise. * tests/test-set-mode-acl.sh: Likewise. * tests/test-snprintf-posix.h: Likewise. * tests/test-sprintf-posix.h: Likewise. * tests/test-strtod.c: Likewise. * tests/test-time.c: Likewise. * tests/test-vasnprintf-posix.c: Likewise. * tests/test-vasprintf-posix.c: Likewise. * doc/acl-resources.txt: Likewise. * doc/**/*.texi: Likewise. Reported by Max Horn <max@quendi.de>.
author Bruno Haible <bruno@clisp.org>
date Fri, 22 Jun 2012 13:26:07 +0200
parents ec738d6aeef5
children 00956ff1864c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of select() substitute.
16201
8250f2777afc maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents: 15735
diff changeset
2 Copyright (C) 2008-2012 Free Software Foundation, Inc.
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4 This program is free software: you can redistribute it and/or modify
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 (at your option) any later version.
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 /* Written by Paolo Bonzini, 2008. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #include <stdio.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20 #include <string.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include <netinet/in.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22 #include <arpa/inet.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23 #include <unistd.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 #include <fcntl.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 #include <stdlib.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 #include <stdbool.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 #include <sys/ioctl.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28 #include <errno.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 #include "macros.h"
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
16214
ec738d6aeef5 Talk about "native Windows API", not "Win32".
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
33 # define WINDOWS_NATIVE
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 #endif
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36 #ifdef HAVE_SYS_WAIT_H
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 # include <sys/wait.h>
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38 #endif
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 #ifndef SO_REUSEPORT
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41 # define SO_REUSEPORT SO_REUSEADDR
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 #endif
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 #define TEST_PORT 12345
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 typedef int (*select_fn) (int, fd_set *, fd_set *, fd_set *, struct timeval *);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 /* Minimal testing infrastructure. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52 static int failures;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54 static void
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 failed (const char *reason)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 if (++failures > 1)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 printf (" ");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 printf ("failed (%s)\n", reason);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62 static int
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 test (void (*fn) (select_fn), select_fn my_select, const char *msg)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 failures = 0;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 printf ("%s... ", msg);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67 fflush (stdout);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 fn (my_select);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 if (!failures)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 printf ("passed\n");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 return failures;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 /* Funny socket code. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79 static int
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80 open_server_socket (void)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
82 int s, x;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
83 struct sockaddr_in ia;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
84
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 s = socket (AF_INET, SOCK_STREAM, 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
86
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
87 memset (&ia, 0, sizeof (ia));
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
88 ia.sin_family = AF_INET;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
89 inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
90 ia.sin_port = htons (TEST_PORT);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
91 if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
92 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
93 perror ("bind");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
94 exit (77);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
95 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
96
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
97 x = 1;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
98 setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x));
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
99
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
100 if (listen (s, 1) < 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
101 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
102 perror ("listen");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
103 exit (77);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
104 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
105
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
106 return s;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
107 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
108
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
109 static int
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
110 connect_to_socket (bool blocking)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
111 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
112 int s;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
113 struct sockaddr_in ia;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
114
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
115 s = socket (AF_INET, SOCK_STREAM, 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
116
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
117 memset (&ia, 0, sizeof (ia));
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
118 ia.sin_family = AF_INET;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
119 inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
120 ia.sin_port = htons (TEST_PORT);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
121
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
122 if (!blocking)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
123 {
16214
ec738d6aeef5 Talk about "native Windows API", not "Win32".
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
124 #ifdef WINDOWS_NATIVE
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
125 unsigned long iMode = 1;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
126 ioctl (s, FIONBIO, (char *) &iMode);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
127
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
128 #elif defined F_GETFL
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
129 int oldflags = fcntl (s, F_GETFL, NULL);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
130
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
131 if (!(oldflags & O_NONBLOCK))
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
132 fcntl (s, F_SETFL, oldflags | O_NONBLOCK);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
133 #endif
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
134 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
135
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
136 if (connect (s, (struct sockaddr *) &ia, sizeof (ia)) < 0
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
137 && (blocking || errno != EINPROGRESS))
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
138 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
139 perror ("connect");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
140 exit (77);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
141 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
142
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
143 return s;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
144 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
145
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
146
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
147 /* A slightly more convenient interface to select(2).
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
148 Waits until a specific event occurs on a file descriptor FD.
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
149 EV is a bit mask of events to look for:
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
150 SEL_IN - input can be polled without blocking,
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
151 SEL_OUT - output can be provided without blocking,
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
152 SEL_EXC - an exception occurred,
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
153 A maximum wait time is specified by TIMEOUT.
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
154 *TIMEOUT = { 0, 0 } means to return immediately,
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
155 TIMEOUT = NULL means to wait indefinitely. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
156
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
157 enum { SEL_IN = 1, SEL_OUT = 2, SEL_EXC = 4 };
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
158
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
159 static int
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
160 do_select (int fd, int ev, struct timeval *timeout, select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
161 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
162 fd_set rfds, wfds, xfds;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
163 int r, rev;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
164
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
165 FD_ZERO (&rfds);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
166 FD_ZERO (&wfds);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
167 FD_ZERO (&xfds);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
168 if (ev & SEL_IN)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
169 FD_SET (fd, &rfds);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
170 if (ev & SEL_OUT)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
171 FD_SET (fd, &wfds);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
172 if (ev & SEL_EXC)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
173 FD_SET (fd, &xfds);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
174 r = my_select (fd + 1, &rfds, &wfds, &xfds, timeout);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
175 if (r < 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
176 return r;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
177
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
178 rev = 0;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
179 if (FD_ISSET (fd, &rfds))
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
180 rev |= SEL_IN;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
181 if (FD_ISSET (fd, &wfds))
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
182 rev |= SEL_OUT;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
183 if (FD_ISSET (fd, &xfds))
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
184 rev |= SEL_EXC;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
185 if (rev && r == 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
186 failed ("select returned 0");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
187 if (rev & ~ev)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
188 failed ("select returned unrequested events");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
189
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
190 return rev;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
191 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
192
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
193 static int
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
194 do_select_nowait (int fd, int ev, select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
195 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
196 struct timeval tv0;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
197 tv0.tv_sec = 0;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
198 tv0.tv_usec = 0;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
199 return do_select (fd, ev, &tv0, my_select);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
200 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
201
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
202 static int
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
203 do_select_wait (int fd, int ev, select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
204 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
205 return do_select (fd, ev, NULL, my_select);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
206 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
207
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
208
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
209 /* Test select(2) for TTYs. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
210
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
211 #ifdef INTERACTIVE
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
212 static void
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
213 test_tty (select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
214 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
215 if (do_select_nowait (0, SEL_IN, my_select) != 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
216 failed ("can read");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
217 if (do_select_nowait (0, SEL_OUT, my_select) == 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
218 failed ("cannot write");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
219
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
220 if (do_select_wait (0, SEL_IN, my_select) == 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
221 failed ("return with infinite timeout");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
222
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
223 getchar ();
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
224 if (do_select_nowait (0, SEL_IN, my_select) != 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
225 failed ("can read after getc");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
226 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
227 #endif
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
228
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
229
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
230 /* Test select(2) on invalid file descriptors. */
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
231
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
232 static int
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
233 do_select_bad_fd (int fd, int ev, struct timeval *timeout, select_fn my_select)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
234 {
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
235 fd_set rfds, wfds, xfds;
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
236
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
237 FD_ZERO (&rfds);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
238 FD_ZERO (&wfds);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
239 FD_ZERO (&xfds);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
240 if (ev & SEL_IN)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
241 FD_SET (fd, &rfds);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
242 if (ev & SEL_OUT)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
243 FD_SET (fd, &wfds);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
244 if (ev & SEL_EXC)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
245 FD_SET (fd, &xfds);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
246 return my_select (fd + 1, &rfds, &wfds, &xfds, timeout);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
247 /* In this case, when fd is invalid, on some platforms, the bit for fd
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
248 is left alone in the fd_set, whereas on other platforms it is cleared.
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
249 So, don't check the bit for fd here. */
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
250 }
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
251
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
252 static int
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
253 do_select_bad_fd_nowait (int fd, int ev, select_fn my_select)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
254 {
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
255 struct timeval tv0;
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
256 tv0.tv_sec = 0;
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
257 tv0.tv_usec = 0;
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
258 return do_select_bad_fd (fd, ev, &tv0, my_select);
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
259 }
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
260
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
261 static void
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
262 test_bad_fd (select_fn my_select)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
263 {
15735
8a33129afa20 select tests: Avoid test failures on OSF/1 5.1 and mingw.
Bruno Haible <bruno@clisp.org>
parents: 15726
diff changeset
264 /* This tests fails on OSF/1 and native Windows, even with fd = 16. */
16214
ec738d6aeef5 Talk about "native Windows API", not "Win32".
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
265 #if !(defined __osf__ || defined WINDOWS_NATIVE)
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
266 int fd;
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
267
16935
498a2211d839 Write "Mac OS X" instead of "MacOS X".
Bruno Haible <bruno@clisp.org>
parents: 16214
diff changeset
268 /* On Linux, Mac OS X, *BSD, values of fd like 99 or 399 are discarded
15735
8a33129afa20 select tests: Avoid test failures on OSF/1 5.1 and mingw.
Bruno Haible <bruno@clisp.org>
parents: 15726
diff changeset
269 by the kernel early and therefore do *not* lead to EBADF, as required
8a33129afa20 select tests: Avoid test failures on OSF/1 5.1 and mingw.
Bruno Haible <bruno@clisp.org>
parents: 15726
diff changeset
270 by POSIX. */
8a33129afa20 select tests: Avoid test failures on OSF/1 5.1 and mingw.
Bruno Haible <bruno@clisp.org>
parents: 15726
diff changeset
271 # if defined __linux__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
272 fd = 16;
15735
8a33129afa20 select tests: Avoid test failures on OSF/1 5.1 and mingw.
Bruno Haible <bruno@clisp.org>
parents: 15726
diff changeset
273 # else
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
274 fd = 99;
15735
8a33129afa20 select tests: Avoid test failures on OSF/1 5.1 and mingw.
Bruno Haible <bruno@clisp.org>
parents: 15726
diff changeset
275 # endif
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
276
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
277 if (do_select_bad_fd_nowait (fd, SEL_IN, my_select) == 0 || errno != EBADF)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
278 failed ("invalid fd among rfds");
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
279 if (do_select_bad_fd_nowait (fd, SEL_OUT, my_select) == 0 || errno != EBADF)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
280 failed ("invalid fd among wfds");
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
281 if (do_select_bad_fd_nowait (fd, SEL_EXC, my_select) == 0 || errno != EBADF)
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
282 failed ("invalid fd among xfds");
15735
8a33129afa20 select tests: Avoid test failures on OSF/1 5.1 and mingw.
Bruno Haible <bruno@clisp.org>
parents: 15726
diff changeset
283 #endif
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
284 }
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
285
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
286
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
287 /* Test select(2) for unconnected nonblocking sockets. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
288
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
289 static void
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
290 test_connect_first (select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
291 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
292 int s = open_server_socket ();
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
293 struct sockaddr_in ia;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
294 socklen_t addrlen;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
295
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
296 int c1, c2;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
297
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
298 if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
299 failed ("can read, socket not connected");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
300
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
301 c1 = connect_to_socket (false);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
302
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
303 if (do_select_wait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
304 failed ("expecting readability on passive socket");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
305 if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
306 failed ("expecting readability on passive socket");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
307
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
308 addrlen = sizeof (ia);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
309 c2 = accept (s, (struct sockaddr *) &ia, &addrlen);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
310 ASSERT (close (s) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
311 ASSERT (close (c1) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
312 ASSERT (close (c2) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
313 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
314
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
315
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
316 /* Test select(2) for unconnected blocking sockets. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
317
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
318 static void
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
319 test_accept_first (select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
320 {
16214
ec738d6aeef5 Talk about "native Windows API", not "Win32".
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
321 #ifndef WINDOWS_NATIVE
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
322 int s = open_server_socket ();
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
323 struct sockaddr_in ia;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
324 socklen_t addrlen;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
325 char buf[3];
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
326 int c, pid;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
327
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
328 pid = fork ();
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
329 if (pid < 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
330 return;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
331
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
332 if (pid == 0)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
333 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
334 addrlen = sizeof (ia);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
335 c = accept (s, (struct sockaddr *) &ia, &addrlen);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
336 ASSERT (close (s) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
337 ASSERT (write (c, "foo", 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
338 ASSERT (read (c, buf, 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
339 shutdown (c, SHUT_RD);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
340 ASSERT (close (c) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
341 exit (0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
342 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
343 else
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
344 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
345 ASSERT (close (s) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
346 c = connect_to_socket (true);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
347 if (do_select_nowait (c, SEL_OUT, my_select) != SEL_OUT)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
348 failed ("cannot write after blocking connect");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
349 ASSERT (write (c, "foo", 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
350 wait (&pid);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
351 if (do_select_wait (c, SEL_IN, my_select) != SEL_IN)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
352 failed ("cannot read data left in the socket by closed process");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
353 ASSERT (read (c, buf, 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
354 ASSERT (write (c, "foo", 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
355 (void) close (c); /* may fail with errno = ECONNRESET */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
356 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
357 #endif
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
358 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
359
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
360
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
361 /* Common code for pipes and connected sockets. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
362
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
363 static void
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
364 test_pair (int rd, int wd, select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
365 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
366 char buf[3];
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
367 if (do_select_wait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
368 failed ("expecting writability before writing");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
369 if (do_select_nowait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
370 failed ("expecting writability before writing");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
371
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
372 ASSERT (write (wd, "foo", 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
373 if (do_select_wait (rd, SEL_IN, my_select) != SEL_IN)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
374 failed ("expecting readability after writing");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
375 if (do_select_nowait (rd, SEL_IN, my_select) != SEL_IN)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
376 failed ("expecting readability after writing");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
377
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
378 ASSERT (read (rd, buf, 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
379 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
380
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
381
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
382 /* Test select(2) on connected sockets. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
383
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
384 static void
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
385 test_socket_pair (select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
386 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
387 struct sockaddr_in ia;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
388
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
389 socklen_t addrlen = sizeof (ia);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
390 int s = open_server_socket ();
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
391 int c1 = connect_to_socket (false);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
392 int c2 = accept (s, (struct sockaddr *) &ia, &addrlen);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
393
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
394 ASSERT (close (s) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
395
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
396 test_pair (c1, c2, my_select);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
397 ASSERT (close (c1) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
398 ASSERT (write (c2, "foo", 3) == 3);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
399 (void) close (c2); /* may fail with errno = ECONNRESET */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
400 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
401
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
402
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
403 /* Test select(2) on pipes. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
404
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
405 static void
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
406 test_pipe (select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
407 {
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
408 int fd[2];
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
409
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
410 ASSERT (pipe (fd) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
411 test_pair (fd[0], fd[1], my_select);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
412 ASSERT (close (fd[0]) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
413 ASSERT (close (fd[1]) == 0);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
414 }
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
415
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
416
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
417 /* Do them all. */
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
418
15459
1b5ac5980a11 test-select.h: avoid warning from gcc's -Wmissing-declarations
Jim Meyering <meyering@redhat.com>
parents: 15445
diff changeset
419 static int
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
420 test_function (select_fn my_select)
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
421 {
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
422 int result = 0;
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
423
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
424 #ifdef INTERACTIVE
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
425 printf ("Please press Enter\n");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
426 test (test_tty, "TTY", my_select);
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
427 #endif
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
428
15726
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
429 result += test (test_bad_fd, my_select, "Invalid fd test");
1a3894d5ce47 select tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents: 15459
diff changeset
430 result += test (test_connect_first, my_select, "Unconnected socket test");
15445
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
431 result += test (test_socket_pair, my_select, "Connected sockets test");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
432 result += test (test_accept_first, my_select, "General socket test with fork");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
433 result += test (test_pipe, my_select, "Pipe test");
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
434
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
435 return result;
78d76c49295d select tests, pselect tests: Refactor.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
436 }