xref: /openbsd-src/regress/sys/kern/select/select_regevent.c (revision 2b613d4d4599a3e3935554e08adc8e9e18dc9ca0)
1*2b613d4dSvisa /*	$OpenBSD: select_regevent.c,v 1.1 2021/11/29 16:11:46 visa Exp $	*/
2*2b613d4dSvisa 
3*2b613d4dSvisa /*
4*2b613d4dSvisa  * Copyright (c) 2021 Visa Hankala
5*2b613d4dSvisa  *
6*2b613d4dSvisa  * Permission to use, copy, modify, and distribute this software for any
7*2b613d4dSvisa  * purpose with or without fee is hereby granted, provided that the above
8*2b613d4dSvisa  * copyright notice and this permission notice appear in all copies.
9*2b613d4dSvisa  *
10*2b613d4dSvisa  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11*2b613d4dSvisa  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12*2b613d4dSvisa  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13*2b613d4dSvisa  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14*2b613d4dSvisa  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15*2b613d4dSvisa  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16*2b613d4dSvisa  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*2b613d4dSvisa  */
18*2b613d4dSvisa 
19*2b613d4dSvisa /*
20*2b613d4dSvisa  * Test that poll/select does not block if a pending event is found
21*2b613d4dSvisa  * during registering.
22*2b613d4dSvisa  */
23*2b613d4dSvisa 
24*2b613d4dSvisa #include <sys/select.h>
25*2b613d4dSvisa #include <assert.h>
26*2b613d4dSvisa #include <err.h>
27*2b613d4dSvisa #include <unistd.h>
28*2b613d4dSvisa 
29*2b613d4dSvisa int
main(void)30*2b613d4dSvisa main(void)
31*2b613d4dSvisa {
32*2b613d4dSvisa 	fd_set rfd;
33*2b613d4dSvisa 	fd_set wfd;
34*2b613d4dSvisa 	int p1[2];
35*2b613d4dSvisa 	int p2[2];
36*2b613d4dSvisa 	int ret;
37*2b613d4dSvisa 
38*2b613d4dSvisa 	/* Enforce test timeout. */
39*2b613d4dSvisa 	alarm(10);
40*2b613d4dSvisa 
41*2b613d4dSvisa 	if (pipe(p1) == -1)
42*2b613d4dSvisa 		err(1, "pipe");
43*2b613d4dSvisa 	if (pipe(p2) == -1)
44*2b613d4dSvisa 		err(1, "pipe");
45*2b613d4dSvisa 
46*2b613d4dSvisa 	close(p2[0]);
47*2b613d4dSvisa 
48*2b613d4dSvisa 	/* fd without event */
49*2b613d4dSvisa 	FD_ZERO(&rfd);
50*2b613d4dSvisa 	FD_SET(p1[0], &rfd);
51*2b613d4dSvisa 
52*2b613d4dSvisa 	/* fd with event */
53*2b613d4dSvisa 	FD_ZERO(&wfd);
54*2b613d4dSvisa 	FD_SET(p2[1], &wfd);
55*2b613d4dSvisa 
56*2b613d4dSvisa 	assert(p1[0] < p2[1]);
57*2b613d4dSvisa 
58*2b613d4dSvisa 	ret = select(p2[1] + 1, &rfd, &wfd, NULL, NULL);
59*2b613d4dSvisa 	assert(ret == 1);
60*2b613d4dSvisa 	assert(FD_ISSET(p1[0], &rfd) == 0);
61*2b613d4dSvisa 	assert(FD_ISSET(p2[1], &wfd) != 0);
62*2b613d4dSvisa 
63*2b613d4dSvisa 	return 0;
64*2b613d4dSvisa }
65