1/* $OpenBSD: poll_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 <assert.h> 25#include <err.h> 26#include <poll.h> 27#include <unistd.h> 28 29int 30main(void) 31{ 32 struct pollfd pfd[2]; 33 int p1[2]; 34 int p2[2]; 35 int ret; 36 37 /* Enforce test timeout. */ 38 alarm(10); 39 40 if (pipe(p1) == -1) 41 err(1, "pipe"); 42 if (pipe(p2) == -1) 43 err(1, "pipe"); 44 45 close(p2[0]); 46 47 /* fd without event */ 48 pfd[0].fd = p1[0]; 49 pfd[0].events = POLLIN; 50 51 /* fd with event */ 52 pfd[1].fd = p2[1]; 53 pfd[1].events = POLLOUT; 54 55 ret = poll(pfd, 2, INFTIM); 56 assert(ret == 1); 57 assert(pfd[0].revents == 0); 58 assert(pfd[1].revents != 0); 59 60 return 0; 61} 62