zhangmeng
2024-04-22 16935f4aebffdd1b6580b844391a0aa0f4f3012b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//
// Copyright 2019 Staysail Systems, Inc. <info@staysail.tech>
//
// This software is supplied under the terms of the MIT License, a
// copy of which should be located in the distribution where this
// file was obtained (LICENSE.txt).  A copy of the license may also be
// found online at https://opensource.org/licenses/MIT.
//
 
// The following adjustments to the platform may be defined.  These can
// be defined in either platform/config.h or loaded in via external
// defines using cmake.
//
// #define NNG_USE_GETTIMEOFDAY
//    This macro is defined if you lack a working clock_gettime,
//    nanosleep, or pthread_condattr_setclock.  In this case the
//    library uses the system clock for relative sleeps, timers, etc.
//    This can be dangerous if the system clock is changed, so only
//    use this if you have no other choice.  If it appears that
//    the system lacks clock_gettime, then it will choose this automatically.
//    This value may be ignored on platforms that don't use POSIX clocks.
//
// #define NNG_USE_CLOCKID
//    This macro may be defined to a different clock id (see
//    clock_gettime()).  By default we use CLOCK_MONOTONIC if it exists,
//    or CLOCK_REALTIME otherwise.  This is ignored if NNG_USE_GETTIMEOFDAY
//    is defined.  Platforms that don't use POSIX clocks will probably
//    ignore any setting here.
//
// #define NNG_HAVE_BACKTRACE
//    If your system has a working backtrace(), and backtrace_symbols(),
//    along with <execinfo.h>, you can define this to get richer backtrace
//    information for debugging.
//
// #define NNG_USE_GETRANDOM
// #define NNG_USE_GETENTROPY
// #define NNG_USE_ARC4RANDOM
// #define NNG_USE_DEVURANDOM
//    These are options for obtaining entropy to seed the pRNG.
//    All known modern UNIX variants can support NNG_USE_DEVURANDOM,
//    but the other options are better still, but not portable.
 
#include <time.h>
 
#ifdef NNG_PLATFORM_POSIX
#if !defined(NNG_USE_DEVURANDOM) && !defined(NNG_USE_GETENTROPY) && \
    !defined(NNG_USE_GETRANDOM) && !defined(NNG_USE_ARC4RANDOM)
#if defined(NNG_HAVE_GETENTROPY)
#define NNG_USE_GETENTROPY 1
#elif defined(NNG_HAVE_GETRANDOM)
#define NNG_USE_GETRANDOM 1
#elif defined(NNG_HAVE_ARC4RANDOM)
#define NNG_USE_ARC4RANDOM
#else
// It should never hurt to use DEVURANDOM, since if the device does not
// exist then we won't open it.  (Provided: it would be bad if the device
// exists but has somehow very very different semantics.  We don't know
// of any such concerns.)  This won't be used if any of the other options
// are defined and work.
#define NNG_USE_DEVURANDOM 1
#endif
#endif
 
#define NNG_USE_CLOCKID CLOCK_REALTIME
#ifndef CLOCK_REALTIME
#define NNG_USE_GETTIMEOFDAY
#elif !defined(NNG_USE_CLOCKID)
#define NNG_USE_CLOCKID CLOCK_MONOTONIC
#else
#define NNG_USE_CLOCKID CLOCK_REALTIME
#endif // CLOCK_REALTIME
 
#if defined(NNG_HAVE_KQUEUE)
// pass
#else
// fallback to poll(2)
#define NNG_USE_POSIX_POLLQ_POLL 1
#endif
#define NNG_USE_POSIX_RESOLV_GAI 1
 
#endif // NNG_PLATFORM_POSIX