mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-09 04:19:10 -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 >> $@
|
-e 's/#ifndef /#ifndef _EVENT_/' < config.h >> $@
|
||||||
echo "#endif" >> $@
|
echo "#endif" >> $@
|
||||||
|
|
||||||
|
noinst_HEADERS = util-internal.h
|
||||||
|
|
||||||
CORE_SRC = event.c buffer.c evbuffer-internal.h bufferevent.c \
|
CORE_SRC = event.c buffer.c evbuffer-internal.h bufferevent.c \
|
||||||
bufferevent-internal.h evmap.c evmap.h \
|
bufferevent-internal.h evmap.c evmap.h \
|
||||||
log.c evutil.c strlcpy.c strlcpy-internal.h $(SYS_SRC)
|
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