mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-08 03:44:22 -04:00
New EVUTIL_ERR_*_RETRIABLE macros to tell if an errno blocked or failed.
svn:r994
This commit is contained in:
parent
99db0e7f72
commit
5ebd23ad74
@ -81,6 +81,8 @@ event-config.h: config.h
|
||||
-e 's/#ifndef /#ifndef _EVENT_/' < config.h >> $@
|
||||
echo "#endif" >> $@
|
||||
|
||||
noinst_HEADERS = util-internal.h
|
||||
|
||||
CORE_SRC = event.c buffer.c evbuffer-internal.h bufferevent.c \
|
||||
bufferevent-internal.h evmap.c evmap.h \
|
||||
log.c evutil.c strlcpy.c strlcpy-internal.h $(SYS_SRC)
|
||||
|
54
util-internal.h
Normal file
54
util-internal.h
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
#ifndef _EVENT_UTIL_INTERNAL_H
|
||||
#define _EVENT_UTIL_INTERNAL_H
|
||||
|
||||
#include "event-config.h"
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Internal use only: macros to match patterns of error codes in a
|
||||
cross-platform way. We need these macros because of two historical
|
||||
reasons: first, nonblocking IO functions are generally written to give an
|
||||
error on the "blocked now, try later" case, so sometimes an error from a
|
||||
read, write, connect, or accept means "no error; just wait for more
|
||||
data," and we need to look at the error code. Second, Windows defines
|
||||
a different set of error codes for sockets. */
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
/* True iff e is an error that means a read/write operation can be retried. */
|
||||
#define EVUTIL_ERR_RW_RETRIABLE(e) \
|
||||
((e) == EINTR || (e) == EAGAIN)
|
||||
/* True iff e is an error that means an accept can be retried. */
|
||||
#define EVUTIL_ERR_CONNECT_RETRIABLE(e) \
|
||||
((e) == EINTR || (e) == EINPROGRESS)
|
||||
/* True iff e is an error that means a connect can be retried. */
|
||||
#define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \
|
||||
((e) == EINTR || (e) == EAGAIN || (e) == ECONNABORTED)
|
||||
|
||||
#else
|
||||
|
||||
#define EVUTIL_ERR_RW_RETRIABLE(e) \
|
||||
((e) == WSAEAGAIN || \
|
||||
(e) == WSAEWOULDBLOCK || \
|
||||
(e) == WSAEINTR)
|
||||
|
||||
#define EVUTIL_ERR_CONNECT_RETRIABLE(e) \
|
||||
((e) == WSAEWOULDBLOCK || \
|
||||
(e) == WSAEINTR || \
|
||||
(e) == WSAEINPROGRESS || \
|
||||
(e) == WSAEINVAL))
|
||||
|
||||
#define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \
|
||||
EVUTIL_ERR_RW_RETRIABLE(e)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user