1 /* $OpenBSD: test-select.c,v 1.1 2021/10/22 05:03:04 anton Exp $ */
2
3 /*
4 * Copyright (c) 2021 Anton Lindqvist <anton@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <sys/select.h>
20
21 #include <err.h>
22 #include <errno.h>
23 #include <unistd.h>
24
25 #include "pipe.h"
26
27 /*
28 * Verify select(2) hangup semantics.
29 */
30 int
test_select_hup(void)31 test_select_hup(void)
32 {
33 fd_set writefds;
34 ssize_t n;
35 int pip[2];
36 int nready;
37 char c = 'c';
38
39 if (pipe(pip) == -1)
40 err(1, "pipe");
41 close(pip[0]);
42
43 FD_ZERO(&writefds);
44 FD_SET(pip[1], &writefds);
45 nready = select(pip[1] + 1, NULL, &writefds, NULL, NULL);
46 if (nready == -1)
47 err(1, "select");
48 if (nready != 1)
49 errx(1, "select: want 1, got %d", nready);
50 n = write(pip[1], &c, sizeof(c));
51 if (n != -1)
52 errx(1, "read: want -1, got %zd", n);
53 if (errno != EPIPE)
54 errx(1, "errno: want %d, got %d", EPIPE, errno);
55
56 return 0;
57 }
58