summaryrefslogtreecommitdiff
path: root/bufferevent.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-01-13 19:20:04 +0000
committerNick Mathewson <nickm@torproject.org>2009-01-13 19:20:04 +0000
commit81ab45add511fd02ac08924841ec811186b3e4bb (patch)
tree5bf59fe215516a61124495d2a3fccc015f19af87 /bufferevent.c
parent5ebd23ad7472ce00dc8e5e2467df7ec02ef8584c (diff)
downloadlibevent-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.c22
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;