diff options
author | Nick Mathewson <nickm@torproject.org> | 2009-01-13 19:20:04 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-01-13 19:20:04 +0000 |
commit | 81ab45add511fd02ac08924841ec811186b3e4bb (patch) | |
tree | 5bf59fe215516a61124495d2a3fccc015f19af87 /bufferevent.c | |
parent | 5ebd23ad7472ce00dc8e5e2467df7ec02ef8584c (diff) | |
download | libevent-81ab45add511fd02ac08924841ec811186b3e4bb.tar.gz |
Use new EVUTIL_ERR_*_RETRIABLE macros when we're testing an errno for blocking.
Previously, we used inconsistent and incompletely ported ifdefs.
(We don't use these macros in platform-specific files like evpoll.c, since
they don't need to work on win32.)
svn:r995
Diffstat (limited to 'bufferevent.c')
-rw-r--r-- | bufferevent.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/bufferevent.c b/bufferevent.c index 4082f53f..32e63b83 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -56,6 +56,7 @@ #include "log.h" #include "mm-internal.h" #include "bufferevent-internal.h" +#include "util-internal.h" /* prototypes */ @@ -171,7 +172,8 @@ bufferevent_readcb(evutil_socket_t fd, short event, void *arg) res = evbuffer_read(input, fd, howmuch); if (res == -1) { - if (errno == EAGAIN || errno == EINTR) + int err = evutil_socket_geterror(fd); + if (EVUTIL_ERR_RW_RETRIABLE(err)) goto reschedule; /* error case */ what |= EVBUFFER_ERROR; @@ -226,20 +228,12 @@ bufferevent_writecb(evutil_socket_t fd, short event, void *arg) if (EVBUFFER_LENGTH(bufev->output)) { res = evbuffer_write(bufev->output, fd); if (res == -1) { -#ifndef WIN32 -/*todo. evbuffer uses WriteFile when WIN32 is set. WIN32 system calls do not - *set errno. thus this error checking is not portable*/ - if (errno == EAGAIN || - errno == EINTR || - errno == EINPROGRESS) - goto reschedule; - /* error case */ - what |= EVBUFFER_ERROR; - -#else + int err = evutil_socket_geterror(fd); + /* XXXX we used to check for EINPROGRESS here too, but I + don't think write can set that. -nick */ + if (EVUTIL_ERR_RW_RETRIABLE(err)) goto reschedule; -#endif - + what |= EVBUFFER_ERROR; } else if (res == 0) { /* eof case */ what |= EVBUFFER_EOF; |