Skip to content

Commit

Permalink
When EWOULDBLOCK is not EAGAIN, treat it as equivalent to it
Browse files Browse the repository at this point in the history
Acording to http://stackoverflow.com/questions/7003234/which-systems-define-eagain-and-ewouldblock-as-different-values
there are some older unixes that distinguish these error.s
  • Loading branch information
nmathewson committed Jan 12, 2013
1 parent b452a43 commit bf7a0ff
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
2 changes: 1 addition & 1 deletion event.c
Original file line number Diff line number Diff line change
Expand Up @@ -2157,7 +2157,7 @@ evthread_notify_base_default(struct event_base *base)
#else
r = write(base->th_notify_fd[1], buf, 1);
#endif
return (r < 0 && errno != EAGAIN) ? -1 : 0;
return (r < 0 && ! EVUTIL_ERR_IS_EAGAIN(errno)) ? -1 : 0;
}

#ifdef EVENT__HAVE_EVENTFD
Expand Down
12 changes: 10 additions & 2 deletions util-internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,23 @@ extern "C" {

#ifndef _WIN32

#if EAGAIN == EWOULDBLOCK
#define EVUTIL_ERR_IS_EAGAIN(e) \
((e) == EAGAIN)
#else
#define EVUTIL_ERR_IS_EAGAIN(e) \
((e) == EAGAIN || (e) == EWOULDBLOCK)
#endif

/* 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)
((e) == EINTR || EVUTIL_ERR_IS_EAGAIN(e))
/* True iff e is an error that means an connect can be retried. */
#define EVUTIL_ERR_CONNECT_RETRIABLE(e) \
((e) == EINTR || (e) == EINPROGRESS)
/* True iff e is an error that means a accept can be retried. */
#define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \
((e) == EINTR || (e) == EAGAIN || (e) == ECONNABORTED)
((e) == EINTR || EVUTIL_ERR_IS_EAGAIN(e) || (e) == ECONNABORTED)

/* True iff e is an error that means the connection was refused */
#define EVUTIL_ERR_CONNECT_REFUSED(e) \
Expand Down

0 comments on commit bf7a0ff

Please sign in to comment.