1 /* $OpenBSD: select_regevent.c,v 1.1 2021/11/29 16:11:46 visa Exp $ */ 2 3 /* 4 * Copyright (c) 2021 Visa Hankala 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 /* 20 * Test that poll/select does not block if a pending event is found 21 * during registering. 22 */ 23 24 #include <sys/select.h> 25 #include <assert.h> 26 #include <err.h> 27 #include <unistd.h> 28 29 int 30 main(void) 31 { 32 fd_set rfd; 33 fd_set wfd; 34 int p1[2]; 35 int p2[2]; 36 int ret; 37 38 /* Enforce test timeout. */ 39 alarm(10); 40 41 if (pipe(p1) == -1) 42 err(1, "pipe"); 43 if (pipe(p2) == -1) 44 err(1, "pipe"); 45 46 close(p2[0]); 47 48 /* fd without event */ 49 FD_ZERO(&rfd); 50 FD_SET(p1[0], &rfd); 51 52 /* fd with event */ 53 FD_ZERO(&wfd); 54 FD_SET(p2[1], &wfd); 55 56 assert(p1[0] < p2[1]); 57 58 ret = select(p2[1] + 1, &rfd, &wfd, NULL, NULL); 59 assert(ret == 1); 60 assert(FD_ISSET(p1[0], &rfd) == 0); 61 assert(FD_ISSET(p2[1], &wfd) != 0); 62 63 return 0; 64 } 65