aboutsummaryrefslogtreecommitdiffstats
path: root/src/sysdeps/tryselectinfinite.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-05-11 10:42:26 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-05-11 10:42:26 +0000
commit648b2e9209d5da04aff5f8a24aed1cd03a110f8d (patch)
tree9f7821fc8a06e4dfec705d79fd8e9a4f4f755103 /src/sysdeps/tryselectinfinite.c
parentc5d6bea6d9f98a593890f9694ef1575d744e5a32 (diff)
downloadskalibs-648b2e9209d5da04aff5f8a24aed1cd03a110f8d.tar.gz
Rename sysdep to selectinfinite, find correct test value for timeout
Diffstat (limited to 'src/sysdeps/tryselectinfinite.c')
-rw-r--r--src/sysdeps/tryselectinfinite.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/sysdeps/tryselectinfinite.c b/src/sysdeps/tryselectinfinite.c
new file mode 100644
index 0000000..83b2c06
--- /dev/null
+++ b/src/sysdeps/tryselectinfinite.c
@@ -0,0 +1,42 @@
+/* ISC license. */
+
+#undef _POSIX_C_SOURCE
+#undef _XOPEN_SOURCE
+
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE
+#endif
+#ifndef _NETBSD_SOURCE
+#define _NETBSD_SOURCE
+#endif
+#ifndef _DARWIN_C_SOURCE
+#define _DARWIN_C_SOURCE
+#endif
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/select.h>
+#include <unistd.h>
+#include <errno.h>
+#include <signal.h>
+
+static void alrm_handler (int sig)
+{
+ (void)sig ;
+ _exit(0) ;
+}
+
+int main (void)
+{
+ struct sigaction action = { .sa_handler = &alrm_handler, .sa_flags = SA_NOCLDSTOP } ;
+ struct timeval tv = { .tv_sec = 100000001, .tv_usec = 0 } ;
+ fd_set r, w, x ;
+ FD_ZERO(&r) ;
+ FD_ZERO(&w) ;
+ FD_ZERO(&x) ;
+ sigfillset(&action.sa_mask) ;
+ if (sigaction(SIGALRM, &action, 0) == -1) _exit(111) ;
+ alarm(1) ;
+ select(1, &r, &w, &x, &tv) ;
+ _exit(errno == EINVAL ? 1 : 111) ;
+}