[Asterisk-code-review] chan sip: Add TCP/TLS keepalive to TCP/TLS server (asterisk[13])
Matt Jordan
asteriskteam at digium.com
Fri Dec 11 12:08:28 CST 2015
Matt Jordan has submitted this change and it was merged.
Change subject: chan_sip: Add TCP/TLS keepalive to TCP/TLS server
......................................................................
chan_sip: Add TCP/TLS keepalive to TCP/TLS server
Adds the TCP Keep Alive option to TCP and TLS server sockets. Previously
this option was only being set on session sockets.
http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
According to the link above, the SO_KEEPALIVE option is useful for knowing
when a TCP connected endpoint has severed communication without indicating
it or has become unreachable for some reason. Without this patch, keep
alive is not set on the socket listening for incoming TCP sessions and
in Komatsu's report this resulted in the thread listening for TCP becoming
stuck in a waiting state.
ASTERISK-25364 #close
Reported by: Hiroaki Komatsu
Change-Id: I7ed7bcfa982b367dc64b4b73fbd962da49b9af36
---
M channels/chan_sip.c
1 file changed, 13 insertions(+), 0 deletions(-)
Approvals:
Kevin Harwell: Looks good to me, but someone else must approve
Anonymous Coward #1000019: Verified
Matt Jordan: Looks good to me, approved
Joshua Colp: Looks good to me, but someone else must approve
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 9bc15bb..5c808cc 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -32235,6 +32235,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-alive on sip socket: %s\n", strerror(errno));
+ }
+ }
}
/* Start TLS server if needed */
@@ -32255,6 +32261,13 @@
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-alive 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");
--
To view, visit https://gerrit.asterisk.org/1798
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I7ed7bcfa982b367dc64b4b73fbd962da49b9af36
Gerrit-PatchSet: 2
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: Jonathan Rose <jrose at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>
Gerrit-Reviewer: Matt Jordan <mjordan at digium.com>
More information about the asterisk-code-review
mailing list