commit e9b33ed1bf4140e3aeda5eb9126027fbe5a3ec5a
Author: Nick Mathewson <nickm(a)torproject.org>
Date: Thu Jul 5 05:01:00 2012 -0400
On windows, ENOBUFS starts with WSA. #6296. Fix on 0.2.18-rc
---
changes/bug6296 | 4 ++++
src/common/compat.h | 3 +++
src/or/connection.c | 4 ++--
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/changes/bug6296 b/changes/bug6296
new file mode 100644
index 0000000..b452b17
--- /dev/null
+++ b/changes/bug6296
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+
+ - Instead of ENOBUFS on Windows, say WSAENOBUFS. Fixes
+ compilation on Windows. Fixes bug 6296; bugfix on 0.2.3.18-rc.
diff --git a/src/common/compat.h b/src/common/compat.h
index 4efb0c8..42648bb 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -500,6 +500,8 @@ int network_init(void);
* the actual errno after a socket operation fails.
*/
#if defined(_WIN32)
+/** Expands to WSA<b>e</b> on Windows, and to <b>e</b> elsewhere. */
+#define SOCK_ERRNO(e) WSA##e
/** Return true if e is EAGAIN or the local equivalent. */
#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN || (e) == WSAEWOULDBLOCK)
/** Return true if e is EINPROGRESS or the local equivalent. */
@@ -520,6 +522,7 @@ int network_init(void);
int tor_socket_errno(tor_socket_t sock);
const char *tor_socket_strerror(int e);
#else
+#define SOCK_ERRNO(e) e
#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN)
#define ERRNO_IS_EINPROGRESS(e) ((e) == EINPROGRESS)
#define ERRNO_IS_CONN_EINPROGRESS(e) ((e) == EINPROGRESS)
diff --git a/src/or/connection.c b/src/or/connection.c
index af5c011..95101ef 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -1336,7 +1336,7 @@ connection_connect(connection_t *conn, const char *address,
if (get_n_open_sockets() >= get_options()->_ConnLimit-1) {
warn_too_many_conns();
- *socket_error = ENOBUFS;
+ *socket_error = SOCK_ERRNO(ENOBUFS);
return -1;
}
@@ -1431,7 +1431,7 @@ connection_connect(connection_t *conn, const char *address,
conn->s = s;
if (connection_add_connecting(conn) < 0) {
/* no space, forget it */
- *socket_error = ENOBUFS;
+ *socket_error = SOCK_ERRNO(ENOBUFS);
return -1;
}
return inprogress ? 0 : 1;