]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
only kill event socket on 100 consecutive errors
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 25 Nov 2009 19:59:26 +0000 (19:59 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 25 Nov 2009 19:59:26 +0000 (19:59 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15671 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/event_handlers/mod_event_socket/mod_event_socket.c

index d5fc5cbc3007f4585b29219262e09ce8263c2615..d818d1b6ca3ecfd7a6a2dddd26f7450ed9902ff8 100644 (file)
@@ -2297,6 +2297,7 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_socket_runtime)
        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 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_socket_runtime)
                        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 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_socket_runtime)
 
        }
 
+ end:
+
        close_socket(&listen_list.sock);
        
        if (prefs.nat_map && switch_core_get_variable("nat_type")) {