diff --git a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c index d5fc5cbc30..d818d1b6ca 100644 --- a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c +++ b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c @@ -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")) {