summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2013-04-26 06:01:43 +0000
committerBenny Prijono <bennylp@teluu.com>2013-04-26 06:01:43 +0000
commit794a79431f46ba8a6c5316c082c064b1b768586a (patch)
tree6f176e0204a84a4ea29578c15c833903eb745818 /pjsip/src/pjsip
parent688fdf10f000a6190b31eee6fc183decda5005aa (diff)
Fixed #1661: Option to use SO_REUSEADDR for TCP and TLS listeners and use it by default on non-Windows platforms
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4506 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip')
-rw-r--r--pjsip/src/pjsip/sip_transport_tcp.c12
-rw-r--r--pjsip/src/pjsip/sip_transport_tls.c1
2 files changed, 13 insertions, 0 deletions
diff --git a/pjsip/src/pjsip/sip_transport_tcp.c b/pjsip/src/pjsip/sip_transport_tcp.c
index fa515d28..38bd42ae 100644
--- a/pjsip/src/pjsip/sip_transport_tcp.c
+++ b/pjsip/src/pjsip/sip_transport_tcp.c
@@ -217,6 +217,7 @@ PJ_DEF(void) pjsip_tcp_transport_cfg_default(pjsip_tcp_transport_cfg *cfg,
cfg->af = af;
pj_sockaddr_init(cfg->af, &cfg->bind_addr, NULL, 0);
cfg->async_cnt = 1;
+ cfg->reuse_addr = PJSIP_TCP_TRANSPORT_REUSEADDR;
}
@@ -298,6 +299,17 @@ PJ_DEF(pj_status_t) pjsip_tcp_transport_start3(
2, listener->factory.obj_name,
"SIP TCP listener socket");
+ /* Apply SO_REUSEADDR */
+ if (cfg->reuse_addr) {
+ int enabled = 1;
+ status = pj_sock_setsockopt(sock, pj_SOL_SOCKET(), pj_SO_REUSEADDR(),
+ &enabled, sizeof(enabled));
+ if (status != PJ_SUCCESS) {
+ PJ_PERROR(4,(listener->factory.obj_name, status,
+ "Warning: error applying SO_REUSEADDR"));
+ }
+ }
+
/* Bind address may be different than factory.local_addr because
* factory.local_addr will be resolved below.
*/
diff --git a/pjsip/src/pjsip/sip_transport_tls.c b/pjsip/src/pjsip/sip_transport_tls.c
index 2e703c6b..06244e53 100644
--- a/pjsip/src/pjsip/sip_transport_tls.c
+++ b/pjsip/src/pjsip/sip_transport_tls.c
@@ -337,6 +337,7 @@ PJ_DEF(pj_status_t) pjsip_tls_transport_start2( pjsip_endpoint *endpt,
ssock_param.read_buffer_size = PJSIP_MAX_PKT_LEN;
ssock_param.ciphers_num = listener->tls_setting.ciphers_num;
ssock_param.ciphers = listener->tls_setting.ciphers;
+ ssock_param.reuse_addr = listener->tls_setting.reuse_addr;
ssock_param.qos_type = listener->tls_setting.qos_type;
ssock_param.qos_ignore_error = listener->tls_setting.qos_ignore_error;
pj_memcpy(&ssock_param.qos_params, &listener->tls_setting.qos_params,