summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-03-23 06:08:36 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-03-23 06:08:36 +0000
commite538ab09fe8139da507eeab044243a79e6bf9ba2 (patch)
treee46b8c9f44f55d91155649d01ed12a1558606914 /pjsip
parentcc4a3ae0cbdb2d86ce6480d030006c9592375baa (diff)
Fixed #1221: Crash when SIP transport tried to write to a broken pipe.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3478 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsip/sip_transport_tcp.c5
-rw-r--r--pjsip/src/pjsip/sip_transport_tls.c5
-rw-r--r--pjsip/src/pjsip/sip_transport_tls_ossl.c5
3 files changed, 15 insertions, 0 deletions
diff --git a/pjsip/src/pjsip/sip_transport_tcp.c b/pjsip/src/pjsip/sip_transport_tcp.c
index 1ad8fedc..43c82ae8 100644
--- a/pjsip/src/pjsip/sip_transport_tcp.c
+++ b/pjsip/src/pjsip/sip_transport_tcp.c
@@ -544,6 +544,7 @@ static pj_status_t tcp_create( struct tcp_listener *listener,
pj_activesock_cfg asock_cfg;
pj_activesock_cb tcp_callback;
const pj_str_t ka_pkt = PJSIP_TCP_KEEP_ALIVE_DATA;
+ pj_int32_t val = 1;
pj_status_t status;
@@ -631,6 +632,10 @@ static pj_status_t tcp_create( struct tcp_listener *listener,
tcp->ka_timer.cb = &tcp_keep_alive_timer;
pj_ioqueue_op_key_init(&tcp->ka_op_key.key, sizeof(pj_ioqueue_op_key_t));
pj_strdup(tcp->base.pool, &tcp->ka_pkt, &ka_pkt);
+
+ /* Prevent SIGPIPE */
+ pj_sock_setsockopt(tcp->sock, pj_SOL_SOCKET(), pj_SO_NOSIGPIPE(),
+ &val, sizeof(val));
/* Done setting up basic transport. */
*p_tcp = tcp;
diff --git a/pjsip/src/pjsip/sip_transport_tls.c b/pjsip/src/pjsip/sip_transport_tls.c
index 59c7e93d..5fcfc39e 100644
--- a/pjsip/src/pjsip/sip_transport_tls.c
+++ b/pjsip/src/pjsip/sip_transport_tls.c
@@ -527,6 +527,7 @@ static pj_status_t tls_create( struct tls_listener *listener,
{
struct tls_transport *tls;
const pj_str_t ka_pkt = PJSIP_TLS_KEEP_ALIVE_DATA;
+ pj_int32_t val = 1;
pj_status_t status;
@@ -616,6 +617,10 @@ static pj_status_t tls_create( struct tls_listener *listener,
pj_ioqueue_op_key_init(&tls->ka_op_key.key, sizeof(pj_ioqueue_op_key_t));
pj_strdup(tls->base.pool, &tls->ka_pkt, &ka_pkt);
+ /* Prevent SIGPIPE */
+ pj_sock_setsockopt(tcp->sock, pj_SOL_SOCKET(), pj_SO_NOSIGPIPE(),
+ &val, sizeof(val));
+
/* Done setting up basic transport. */
*p_tls = tls;
diff --git a/pjsip/src/pjsip/sip_transport_tls_ossl.c b/pjsip/src/pjsip/sip_transport_tls_ossl.c
index d652b0be..d2f1b423 100644
--- a/pjsip/src/pjsip/sip_transport_tls_ossl.c
+++ b/pjsip/src/pjsip/sip_transport_tls_ossl.c
@@ -1229,6 +1229,7 @@ static pj_status_t tls_create( struct tls_listener *listener,
pj_ioqueue_t *ioqueue;
pj_ioqueue_callback tls_callback;
int rc;
+ pj_int32_t val = 1;
pj_status_t status;
@@ -1332,6 +1333,10 @@ static pj_status_t tls_create( struct tls_listener *listener,
tls->ka_timer.user_data = (void*) tls;
tls->ka_timer.cb = &tls_keep_alive_timer;
+ /* Prevent SIGPIPE */
+ pj_sock_setsockopt(tcp->sock, pj_SOL_SOCKET(), pj_SO_NOSIGPIPE(),
+ &val, sizeof(val));
+
/* Done setting up basic transport. */
*p_tls = tls;