Revision
15671
Author
anthm
Date
2009-11-25 13:59:26 -0600 (Wed, 25 Nov 2009)

Log Message

only kill event socket on 100 consecutive errors

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (15670 => 15671)


--- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	2009-11-25 18:26:49 UTC (rev 15670)
+++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c	2009-11-25 19:59:26 UTC (rev 15671)
@@ -2297,6 +2297,7 @@
 	switch_socket_t *inbound_socket = NULL;
 	listener_t *listener;
 	uint32_t x = 0;
+	uint32_t errs = 0;
 
 	if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "OH OH no pool\n");
@@ -2342,15 +2343,23 @@
 			goto fail;
 		}
 
+		
 		if ((rv = switch_socket_accept(&inbound_socket, listen_list.sock, listener_pool))) {
 			if (prefs.done) {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Shutting Down\n");
+				goto end;
 			} else {
-				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Socket Error\n");
+				/* I wish we could use strerror_r here but its not defined everywhere =/ */
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Socket Error [%s]\n", strerror(errno));
+				if (++errs > 100) {
+					goto end;
+				}
 			}
-			break;
+		} else {
+			errs = 0;
 		}
 
+		
 		if (!(listener = switch_core_alloc(listener_pool, sizeof(*listener)))) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error\n");
 			break;
@@ -2376,6 +2385,8 @@
 
 	}
 
+ end:
+
 	close_socket(&listen_list.sock);
 	
 	if (prefs.nat_map && switch_core_get_variable("nat_type")) {