--- channels/chan_sip.c.org 2015-09-01 13:45:00.000000000 +0900 +++ channels/chan_sip.c 2015-09-01 13:47:30.569399316 +0900 @@ -3076,12 +3076,6 @@ } } - flags = 1; - if (setsockopt(tcptls_session->fd, SOL_SOCKET, SO_KEEPALIVE, &flags, sizeof(flags))) { - ast_log(LOG_ERROR, "error enabling TCP keep-alives on sip socket: %s\n", strerror(errno)); - goto cleanup; - } - me->threadid = pthread_self(); ast_debug(2, "Starting thread for %s server\n", tcptls_session->ssl ? "TLS" : "TCP"); @@ -31899,6 +31893,12 @@ ast_log(LOG_ERROR, "SIP TCP Server start failed. Not listening on TCP socket.\n"); } else { ast_debug(2, "SIP TCP server started\n"); + if (sip_tcp_desc.accept_fd >= 0) { + int flags = 1; + if (setsockopt(sip_tcp_desc.accept_fd, SOL_SOCKET, SO_KEEPALIVE, &flags, sizeof(flags))) { + ast_log(LOG_ERROR, "error enabling TCP keep-alives on sip socket: %s\n", strerror(errno)); + } + } } /* Start TLS server if needed */ @@ -31919,6 +31919,14 @@ ast_log(LOG_ERROR, "TLS Server start failed. Not listening on TLS socket.\n"); sip_tls_desc.tls_cfg = NULL; } + if (sip_tls_desc.accept_fd >= 0) { + int flags = 1; + if (setsockopt(sip_tls_desc.accept_fd, SOL_SOCKET, SO_KEEPALIVE, &flags, sizeof(flags))) { + ast_log(LOG_ERROR, "error enabling TCP keep-alives on sip socket: %s\n", strerror(errno)); + sip_tls_desc.tls_cfg = NULL; + } + } + } else if (sip_tls_desc.tls_cfg->enabled) { sip_tls_desc.tls_cfg = NULL; ast_log(LOG_WARNING, "SIP TLS server did not load because of errors.\n");