diff --git a/evdns.c b/evdns.c
index 9e5a0f2..d12642e 100644
--- a/evdns.c
+++ b/evdns.c
@@ -2100,11 +2100,11 @@ server_port_free(struct evdns_server_port *port)
 	EVUTIL_ASSERT(port);
 	EVUTIL_ASSERT(!port->refcnt);
 	EVUTIL_ASSERT(!port->pending_replies);
+	(void) event_del(&port->event);
 	if (port->socket > 0) {
 		evutil_closesocket(port->socket);
 		port->socket = -1;
 	}
-	(void) event_del(&port->event);
 	event_debug_unassign(&port->event);
 	EVTHREAD_FREE_LOCK(port->lock, EVTHREAD_LOCKTYPE_RECURSIVE);
 	mm_free(port);
@@ -3925,9 +3925,9 @@ evdns_err_to_string(int err)
 static void
 evdns_nameserver_free(struct nameserver *server)
 {
-	if (server->socket >= 0)
-	evutil_closesocket(server->socket);
 	(void) event_del(&server->event);
+	if (server->socket >= 0)
+		evutil_closesocket(server->socket);
 	event_debug_unassign(&server->event);
 	if (server->state == 0)
 		(void) event_del(&server->timeout_event);
diff --git a/http.c b/http.c
index 9b96ffb..a01d617 100644
--- a/http.c
+++ b/http.c
@@ -1239,6 +1239,7 @@ evhttp_connection_reset(struct evhttp_connection *evcon)
 		if (evhttp_connected(evcon) && evcon->closecb != NULL)
 			(*evcon->closecb)(evcon, evcon->closecb_arg);
 
+		bufferevent_setfd(evcon->bufev, -1);
 		shutdown(evcon->fd, EVUTIL_SHUT_WR);
 		evutil_closesocket(evcon->fd);
 		evcon->fd = -1;
