From 52f9baeee2afd77d852d6e8d63ed8414d0f28f74 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 22 Apr 2011 10:54:02 -0400 Subject: [PATCH 1/4] call setsockopt correctly on connecting() IOCP-bufferevents so shutdown() will work --- bufferevent_async.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bufferevent_async.c b/bufferevent_async.c index b7284fda..76a16162 100644 --- a/bufferevent_async.c +++ b/bufferevent_async.c @@ -63,6 +63,11 @@ #include "util-internal.h" #include "iocp-internal.h" +#ifndef SO_UPDATE_CONNECT_CONTEXT +/* Mingw is sometimes missing this */ +#define SO_UPDATE_CONNECT_CONTEXT 0x7010 +#endif + /* prototypes */ static int be_async_enable(struct bufferevent *, short); static int be_async_disable(struct bufferevent *, short); @@ -403,11 +408,15 @@ connect_complete(struct event_overlapped *eo, ev_uintptr_t key, { struct bufferevent_async *bev_a = upcast_connect(eo); struct bufferevent *bev = &bev_a->bev.bev; + evutil_socket_t sock; BEV_LOCK(bev); EVUTIL_ASSERT(bev_a->bev.connecting); bev_a->bev.connecting = 0; + sock = _evbuffer_overlapped_get_fd(bev_a->bev.bev.input); + /* XXXX Handle error? */ + setsockopt(sock, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0); if (ok) bufferevent_async_set_connected(bev); From dd68cce439ae01d906e46b0f361f3ef625d5abec Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sat, 23 Apr 2011 01:47:43 -0400 Subject: [PATCH 2/4] Add missing header for regress_http compilation on win32 --- test/regress_http.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/regress_http.c b/test/regress_http.c index 62516b60..95511ae9 100644 --- a/test/regress_http.c +++ b/test/regress_http.c @@ -27,6 +27,7 @@ #ifdef WIN32 #include +#include #include #endif From 53d1e450f4a5ed21c4eec216392524ff2ab7a7a7 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sat, 23 Apr 2011 01:48:11 -0400 Subject: [PATCH 3/4] Try to fix up CHECK_REGRESS hack to not break on win32 --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index c9c30c6a..2d5214cb 100644 --- a/configure.in +++ b/configure.in @@ -77,7 +77,7 @@ AC_SUBST(LIBTOOL_DEPS) AM_CONDITIONAL([BUILD_REGRESS], [test "$enable_libevent_regress" = "yes"]) if test "$enable_libevent_regress" = "yes" ; then - CHECK_REGRESS=regress + CHECK_REGRESS='regress$(EXEENT)' else CHECK_REGRESS= fi From 7739c86da0e5a659c5dce4bead736e184be5ae9b Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sat, 23 Apr 2011 02:31:04 -0400 Subject: [PATCH 4/4] Fix msvc build: it needed to know about _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE --- WIN32-Code/event2/event-config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WIN32-Code/event2/event-config.h b/WIN32-Code/event2/event-config.h index fa14ae94..3f0c7ee2 100644 --- a/WIN32-Code/event2/event-config.h +++ b/WIN32-Code/event2/event-config.h @@ -192,6 +192,9 @@ /* Define to 1 if `sin_len' is member of `struct sockaddr_in'. */ /* #undef _EVENT_HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */ +/* Define to 1 if the system has the type `struct sockaddr_storage'. */ +#define _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE 1 + /* Define to 1 if you have the header file. */ /* #undef _EVENT_HAVE_SYS_DEVPOLL_H */