-#define FD_SETSIZE 1024
-#endif
-
-#define __DARWIN_NBBY 8 /* bits in a byte */
-#define __DARWIN_NFDBITS (sizeof(__int32_t) * __DARWIN_NBBY) /* bits per mask */
-#define __DARWIN_howmany(x, y) (((x) + ((y) - 1)) / (y)) /* # y's == x bits? */
-
-typedef struct fd_set {
- __int32_t fds_bits[__DARWIN_howmany(FD_SETSIZE, __DARWIN_NFDBITS)];
-} fd_set;
-
-#define FD_SET(n, p) ((p)->fds_bits[(n)/__DARWIN_NFDBITS] |= (1<<((n) % __DARWIN_NFDBITS)))
-#define FD_CLR(n, p) ((p)->fds_bits[(n)/__DARWIN_NFDBITS] &= ~(1<<((n) % __DARWIN_NFDBITS)))
-#define FD_ISSET(n, p) ((p)->fds_bits[(n)/__DARWIN_NFDBITS] & (1<<((n) % __DARWIN_NFDBITS)))
-#if __GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3
-/*
- * Use the built-in bzero function instead of the library version so that
- * we do not pollute the namespace or introduce prototype warnings.
- */
-#define FD_ZERO(p) __builtin_bzero(p, sizeof(*(p)))
-#else
-#define FD_ZERO(p) bzero(p, sizeof(*(p)))
-#endif
-#ifndef _POSIX_C_SOURCE
-#define FD_COPY(f, t) bcopy(f, t, sizeof(*(f)))
-#endif /* !_POSIX_C_SOURCE */
-
-#endif /* !_FD_SET */
+#define FD_SETSIZE __DARWIN_FD_SETSIZE
+#endif /* FD_SETSIZE */
+#ifndef FD_SET
+#define FD_SET(n, p) __DARWIN_FD_SET(n, p)
+#endif /* FD_SET */
+#ifndef FD_CLR
+#define FD_CLR(n, p) __DARWIN_FD_CLR(n, p)
+#endif /* FD_CLR */
+#ifndef FD_ISSET
+#define FD_ISSET(n, p) __DARWIN_FD_ISSET(n, p)
+#endif /* FD_ISSET */
+#ifndef FD_ZERO
+#define FD_ZERO(p) __DARWIN_FD_ZERO(p)
+#endif /* FD_ZERO */
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
+#ifndef FD_COPY
+#define FD_COPY(f, t) __DARWIN_FD_COPY(f, t)
+#endif /* FD_COPY */
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */