26 #ifndef _EVENT_UTIL_INTERNAL_H
27 #define _EVENT_UTIL_INTERNAL_H
29 #include "event2/event-config.h"
33 #include "log-internal.h"
36 #ifdef _EVENT_HAVE_SYS_SOCKET_H
37 #include <sys/socket.h>
49 #define inline _EVENT_inline
51 #ifdef _EVENT___func__
52 #define __func__ _EVENT___func__
56 #define _EVUTIL_NIL_STMT ((void)0)
62 #define _EVUTIL_NIL_CONDITION(condition) do { \
63 (void)sizeof(!(condition)); \
77 #define EVUTIL_ERR_RW_RETRIABLE(e) \
78 ((e) == EINTR || (e) == EAGAIN)
80 #define EVUTIL_ERR_CONNECT_RETRIABLE(e) \
81 ((e) == EINTR || (e) == EINPROGRESS)
83 #define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \
84 ((e) == EINTR || (e) == EAGAIN || (e) == ECONNABORTED)
87 #define EVUTIL_ERR_CONNECT_REFUSED(e) \
92 #define EVUTIL_ERR_RW_RETRIABLE(e) \
93 ((e) == WSAEWOULDBLOCK || \
96 #define EVUTIL_ERR_CONNECT_RETRIABLE(e) \
97 ((e) == WSAEWOULDBLOCK || \
99 (e) == WSAEINPROGRESS || \
102 #define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \
103 EVUTIL_ERR_RW_RETRIABLE(e)
105 #define EVUTIL_ERR_CONNECT_REFUSED(e) \
106 ((e) == WSAECONNREFUSED)
110 #ifdef _EVENT_socklen_t
111 #define socklen_t _EVENT_socklen_t
116 #define EVUTIL_SHUT_RD SHUT_RD
118 #define EVUTIL_SHUT_RD 0
121 #define EVUTIL_SHUT_WR SHUT_WR
123 #define EVUTIL_SHUT_WR 1
126 #define EVUTIL_SHUT_BOTH SHUT_BOTH
128 #define EVUTIL_SHUT_BOTH 2
135 int EVUTIL_ISALPHA(
char c);
136 int EVUTIL_ISALNUM(
char c);
137 int EVUTIL_ISSPACE(
char c);
138 int EVUTIL_ISDIGIT(
char c);
139 int EVUTIL_ISXDIGIT(
char c);
140 int EVUTIL_ISPRINT(
char c);
141 int EVUTIL_ISLOWER(
char c);
142 int EVUTIL_ISUPPER(
char c);
143 char EVUTIL_TOUPPER(
char c);
144 char EVUTIL_TOLOWER(
char c);
161 #define EVUTIL_UPCAST(ptr, type, field) \
162 ((type *)(((char*)(ptr)) - evutil_offsetof(type, field)))
164 int evutil_read_file(
const char *filename,
char **content_out,
size_t *len_out,
167 int evutil_socket_connect(
evutil_socket_t *fd_ptr,
struct sockaddr *sa,
int socklen);
173 int evutil_resolve(
int family,
const char *hostname,
struct sockaddr *sa,
174 ev_socklen_t *socklen,
int port);
176 const char *evutil_getenv(
const char *name);
178 long _evutil_weakrand(
void);
182 #if defined(__GNUC__) && __GNUC__ >= 3
183 #define EVUTIL_UNLIKELY(p) __builtin_expect(!!(p),0)
185 #define EVUTIL_UNLIKELY(p) (p)
190 #define EVUTIL_ASSERT(cond) _EVUTIL_NIL_CONDITION(cond)
191 #define EVUTIL_FAILURE_CHECK(cond) 0
193 #define EVUTIL_ASSERT(cond) \
195 if (EVUTIL_UNLIKELY(!(cond))) { \
196 event_errx(_EVENT_ERR_ABORT, \
197 "%s:%d: Assertion %s failed in %s", \
198 __FILE__,__LINE__,#cond,__func__); \
201 (void)fprintf(stderr, \
202 "%s:%d: Assertion %s failed in %s", \
203 __FILE__,__LINE__,#cond,__func__); \
207 #define EVUTIL_FAILURE_CHECK(cond) EVUTIL_UNLIKELY(cond)
210 #ifndef _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE
216 struct sockaddr ss_sa;
217 struct sockaddr_in ss_sin;
219 char ss_padding[128];
222 #define ss_family ss_union.ss_sa.sa_family
228 #define EVUTIL_EAI_NEED_RESOLVE -90002
234 const char *nodename,
const char *servname,
238 void evutil_set_evdns_getaddrinfo_fn(evdns_getaddrinfo_fn fn);
244 void evutil_adjust_hints_for_addrconfig(
struct evutil_addrinfo *hints);
245 int evutil_getaddrinfo_common(
const char *nodename,
const char *servname,
248 int evutil_getaddrinfo_async(
struct evdns_base *dns_base,
249 const char *nodename,
const char *servname,
255 int evutil_sockaddr_is_loopback(
const struct sockaddr *sa);
263 const char *evutil_format_sockaddr_port(
const struct sockaddr *sa,
char *out,
size_t outlen);
265 long evutil_tv_to_msec(
const struct timeval *tv);
267 int evutil_hex_char_to_int(
char c);
270 HANDLE evutil_load_windows_system_library(
const TCHAR *library_name);
274 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)
275 #define EV_U64_FMT "%I64u"
276 #define EV_I64_FMT "%I64d"
277 #define EV_I64_ARG(x) ((__int64)(x))
278 #define EV_U64_ARG(x) ((unsigned __int64)(x))
280 #define EV_U64_FMT "%llu"
281 #define EV_I64_FMT "%lld"
282 #define EV_I64_ARG(x) ((long long)(x))
283 #define EV_U64_ARG(x) ((unsigned long long)(x))
287 #if defined(__STDC__) && defined(__STDC_VERSION__)
288 #if (__STDC_VERSION__ >= 199901L)
289 #define EV_SIZE_FMT "%zu"
290 #define EV_SSIZE_FMT "%zd"
291 #define EV_SIZE_ARG(x) (x)
292 #define EV_SSIZE_ARG(x) (x)
297 #if (_EVENT_SIZEOF_SIZE_T <= _EVENT_SIZEOF_LONG)
298 #define EV_SIZE_FMT "%lu"
299 #define EV_SSIZE_FMT "%ld"
300 #define EV_SIZE_ARG(x) ((unsigned long)(x))
301 #define EV_SSIZE_ARG(x) ((long)(x))
303 #define EV_SIZE_FMT EV_U64_FMT
304 #define EV_SSIZE_FMT EV_I64_FMT
305 #define EV_SIZE_ARG(x) EV_U64_ARG(x)
306 #define EV_SSIZE_ARG(x) EV_I64_ARG(x)
Replacement types and functions for platforms that don't support ipv6 properly.
#define evutil_socket_t
A type wide enough to hold the output of "socket()" or "accept()".
Definition: util.h:278
Common convenience functions for cross-platform portability and related socket manipulations.
Definition: util-internal.h:214
A definition of struct addrinfo for systems that lack it.
Definition: util.h:513
Definition: ipv6-internal.h:61