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