haiku/headers/posix/sys/select.h
Axel Dörfler 5adca30a18 Merge of branches/team/network/new_stack - not yet complete as SVN does only support
replacing files when merging when you don't have deleted them manually (for some reason,
it only works as part of the merge operation, and we didn't copy the whole tree to
have "a fresh start" - next time we know better, at least if SVN still suffers from
that same limitation).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18456 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-08 12:33:33 +00:00

61 lines
1.5 KiB
C

/*
* Copyright 2002-2006, Haiku Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _SYS_SELECT_H
#define _SYS_SELECT_H
#include <sys/time.h>
#include <signal.h>
/* If FD_SET is already defined, only the select() prototype is
* exported in this header.
*/
#ifndef FD_SET
/* You can define your own FDSETSIZE if you need more bits - but
* it should be enough for most uses.
*/
#ifndef FD_SETSIZE
# define FD_SETSIZE 1024
#endif
typedef unsigned long fd_mask;
#ifndef _howmany
# define _howmany(x, y) (((x) + ((y) - 1)) / (y))
#endif
#define NFDBITS (sizeof(fd_mask) * 8) /* bits per mask */
typedef struct fd_set {
fd_mask bits[_howmany(FD_SETSIZE, NFDBITS)];
} fd_set;
#define _FD_BITSINDEX(fd) ((fd) / NFDBITS)
#define _FD_BIT(fd) (1L << ((fd) % NFDBITS))
#define FD_ZERO(set) memset((set), 0, sizeof(fd_set))
#define FD_SET(fd, set) ((set)->bits[_FD_BITSINDEX(fd)] |= _FD_BIT(fd))
#define FD_CLR(fd, set) ((set)->bits[_FD_BITSINDEX(fd)] &= ~_FD_BIT(fd))
#define FD_ISSET(fd, set) ((set)->bits[_FD_BITSINDEX(fd)] & _FD_BIT(fd))
#endif /* FD_SET */
#ifdef __cplusplus
extern "C" {
#endif
extern int pselect(int numBits, struct fd_set *readBits, struct fd_set *writeBits,
struct fd_set *errorBits, const struct timespec *timeout, const sigset_t *sigMask);
extern int select(int numBits, struct fd_set *readBits, struct fd_set *writeBits,
struct fd_set *errorBits, struct timeval *timeout);
#ifdef __cplusplus
}
#endif
#endif /* _SYS_SELECT_H */