diff options
author | Nick Mathewson <nickm@torproject.org> | 2003-08-14 17:13:52 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2003-08-14 17:13:52 +0000 |
commit | cd3467bb01cb5bd98b2978fb50bdaa2f3227c980 (patch) | |
tree | d91d3689a009c3fa358bae94e883240e83fcb642 /src/or/buffers.c | |
parent | 88edae94076cc39d40a39f80b2d6ddadc88fe324 (diff) | |
download | tor-cd3467bb01cb5bd98b2978fb50bdaa2f3227c980.tar tor-cd3467bb01cb5bd98b2978fb50bdaa2f3227c980.tar.gz |
Attempt to make sockets code work right on windows.
svn:r398
Diffstat (limited to 'src/or/buffers.c')
-rw-r--r-- | src/or/buffers.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/or/buffers.c b/src/or/buffers.c index 4a89b260d..3ea26dbab 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -36,6 +36,9 @@ void buf_free(char *buf) { int read_to_buf(int s, int at_most, char **buf, int *buflen, int *buf_datalen, int *reached_eof) { int read_result; +#ifdef MS_WINDOWS + int e; +#endif assert(buf && *buf && buflen && buf_datalen && reached_eof && (s>=0)); @@ -62,9 +65,15 @@ int read_to_buf(int s, int at_most, char **buf, int *buflen, int *buf_datalen, i // log_fn(LOG_DEBUG,"reading at most %d bytes.",at_most); read_result = read(s, *buf+*buf_datalen, at_most); if (read_result < 0) { - if(errno!=EAGAIN) { /* it's a real error */ + if(!ERRNO_EAGAIN(errno)) { /* it's a real error */ return -1; } +#ifdef MS_WINDOWS + e = correct_socket_errno(s); + if(!ERRNO_EAGAIN(errno)) { /* no, it *is* a real error! */ + return -1; + } +#endif return 0; } else if (read_result == 0) { log_fn(LOG_DEBUG,"Encountered eof"); @@ -84,6 +93,9 @@ int flush_buf(int s, char **buf, int *buflen, int *buf_flushlen, int *buf_datale * return -1 or how many bytes remain to be flushed */ int write_result; +#ifdef MS_WINDOWS + int e; +#endif assert(buf && *buf && buflen && buf_flushlen && buf_datalen && (s>=0) && (*buf_flushlen <= *buf_datalen)); @@ -94,9 +106,15 @@ int flush_buf(int s, char **buf, int *buflen, int *buf_flushlen, int *buf_datale write_result = write(s, *buf, *buf_flushlen); if (write_result < 0) { - if(errno!=EAGAIN) { /* it's a real error */ + if(!ERRNO_EAGAIN(errno)) { /* it's a real error */ + return -1; + } +#ifdef MS_WINDOWS + e = correct_socket_errno(s); + if(!ERRNO_EAGAIN(errno)) { /* no, it *is* a real error! */ return -1; } +#endif log_fn(LOG_DEBUG,"write() would block, returning."); return 0; } else { |