]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
ESL-58 --resolve
authorMarc Olivier Chouinard <mochouinard@moctel.com>
Fri, 16 Dec 2011 04:02:10 +0000 (23:02 -0500)
committerMarc Olivier Chouinard <mochouinard@moctel.com>
Fri, 16 Dec 2011 04:02:10 +0000 (23:02 -0500)
Please Windows user test this one out.

libs/esl/src/esl.c

index d8498b45f5c52c4527692ae22147d2c0e6e62bec..18d7408c6edb9ea40f3a514b9d6580dfe7f9b251 100644 (file)
 #ifndef WIN32
 #define closesocket(x) close(x)
 #include <fcntl.h>
+#include <errno.h>
 #else
 #pragma warning (disable:6386)
 /* These warnings need to be ignored warning in sdk header */
 #include <Ws2tcpip.h>
+#include <windows.h>
+#define errno WSAGetLastError()
 #pragma warning (default:6386)
 #endif
 
@@ -1083,7 +1086,21 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms
 
 static esl_ssize_t handle_recv(esl_handle_t *handle, void *data, esl_size_t datalen)
 {
-       return recv(handle->sock, data, datalen, 0);
+       int activity;
+       
+       while (handle->connected) {
+               activity = esl_wait_sock(handle->sock, 1000, ESL_POLL_READ|ESL_POLL_ERROR);
+               
+               if (activity > 0 && (activity & ESL_POLL_READ)) {
+                       return recv(handle->sock, data, datalen, 0);
+               }
+
+               if (activity < 0) {
+                       return errno == EINTR ? 0 : -1;
+               }
+       }
+
+       return -1;
 }
 
 ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_event_t **save_event)