From 289d0de371637b36c6273958543b7d4b59f40c7d Mon Sep 17 00:00:00 2001
From: Marc Olivier Chouinard <mochouinard@moctel.com>
Date: Sun, 23 Feb 2014 20:52:14 -0500
Subject: [PATCH] some circonstance, esl connection closing would hang.  This
 should fix it

---
 libs/esl/src/esl.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c
index bf9d3499dd..3634169b48 100644
--- a/libs/esl/src/esl.c
+++ b/libs/esl/src/esl.c
@@ -834,6 +834,10 @@ ESL_DECLARE(int) esl_wait_sock(esl_socket_t sock, uint32_t ms, esl_poll_t flags)
 	fd_set efds;
 	struct timeval tv;
 
+        if (sock == ESL_SOCK_INVALID) {
+                return ESL_SOCK_INVALID;
+        }
+
 	FD_ZERO(&rfds);
 	FD_ZERO(&wfds);
 	FD_ZERO(&efds);
@@ -913,7 +917,11 @@ ESL_DECLARE(int) esl_wait_sock(esl_socket_t sock, uint32_t ms, esl_poll_t flags)
 {
 	struct pollfd pfds[2] = { { 0 } };
 	int s = 0, r = 0;
-	
+
+	if (sock == ESL_SOCK_INVALID) {
+		return ESL_SOCK_INVALID;
+	}	
+
 	pfds[0].fd = sock;
 
 	if ((flags & ESL_POLL_READ)) {
@@ -1229,7 +1237,9 @@ static esl_ssize_t handle_recv(esl_handle_t *handle, void *data, esl_size_t data
 	
 	if (handle->connected) {
 		if ((activity = esl_wait_sock(handle->sock, 1000, ESL_POLL_READ|ESL_POLL_ERROR)) > 0) {
-			if ((activity & ESL_POLL_ERROR)) {
+			if (activity < 0) {
+				activity = -1;
+			} else if ((activity & ESL_POLL_ERROR)) {
 				activity = -1;
 			} else if ((activity & ESL_POLL_READ)) {
 				if (!(activity = recv(handle->sock, data, datalen, 0))) {