svc_fdset.c revision 1.1.10.2 1 1.1.10.2 yamt /* $NetBSD: svc_fdset.c,v 1.1.10.2 2014/05/22 11:36:53 yamt Exp $ */
2 1.1.10.2 yamt
3 1.1.10.2 yamt #include <sys/cdefs.h>
4 1.1.10.2 yamt __RCSID("$NetBSD: svc_fdset.c,v 1.1.10.2 2014/05/22 11:36:53 yamt Exp $");
5 1.1.10.2 yamt
6 1.1.10.2 yamt #include <pthread.h>
7 1.1.10.2 yamt #include <stdlib.h>
8 1.1.10.2 yamt #include <string.h>
9 1.1.10.2 yamt #include <sys/select.h>
10 1.1.10.2 yamt
11 1.1.10.2 yamt #include "svc_fdset.h"
12 1.1.10.2 yamt
13 1.1.10.2 yamt static pthread_key_t fdsetkey;
14 1.1.10.2 yamt static pthread_key_t fdmaxkey;
15 1.1.10.2 yamt static fd_set thefdset;
16 1.1.10.2 yamt static int thefdmax;
17 1.1.10.2 yamt
18 1.1.10.2 yamt void
19 1.1.10.2 yamt init_fdsets(void)
20 1.1.10.2 yamt {
21 1.1.10.2 yamt
22 1.1.10.2 yamt pthread_key_create(&fdsetkey, NULL);
23 1.1.10.2 yamt pthread_key_create(&fdmaxkey, NULL);
24 1.1.10.2 yamt }
25 1.1.10.2 yamt
26 1.1.10.2 yamt void
27 1.1.10.2 yamt alloc_fdset(void)
28 1.1.10.2 yamt {
29 1.1.10.2 yamt fd_set *fdsetti;
30 1.1.10.2 yamt int *fdmax;
31 1.1.10.2 yamt
32 1.1.10.2 yamt fdsetti = malloc(sizeof(*fdsetti));
33 1.1.10.2 yamt memset(fdsetti, 0, sizeof(*fdsetti));
34 1.1.10.2 yamt pthread_setspecific(fdsetkey, fdsetti);
35 1.1.10.2 yamt
36 1.1.10.2 yamt fdmax = malloc(sizeof(*fdmax));
37 1.1.10.2 yamt memset(fdmax, 0, sizeof(*fdmax));
38 1.1.10.2 yamt pthread_setspecific(fdmaxkey, fdmax);
39 1.1.10.2 yamt }
40 1.1.10.2 yamt
41 1.1.10.2 yamt fd_set *
42 1.1.10.2 yamt get_fdset(void)
43 1.1.10.2 yamt {
44 1.1.10.2 yamt fd_set *rv;
45 1.1.10.2 yamt
46 1.1.10.2 yamt rv = pthread_getspecific(fdsetkey);
47 1.1.10.2 yamt if (rv)
48 1.1.10.2 yamt return rv;
49 1.1.10.2 yamt else
50 1.1.10.2 yamt return &thefdset;
51 1.1.10.2 yamt }
52 1.1.10.2 yamt
53 1.1.10.2 yamt int *
54 1.1.10.2 yamt get_fdsetmax(void)
55 1.1.10.2 yamt {
56 1.1.10.2 yamt int *rv;
57 1.1.10.2 yamt
58 1.1.10.2 yamt rv = pthread_getspecific(fdmaxkey);
59 1.1.10.2 yamt if (rv)
60 1.1.10.2 yamt return rv;
61 1.1.10.2 yamt else
62 1.1.10.2 yamt return &thefdmax;
63 1.1.10.2 yamt }
64