diff options
author | Liong Sauw Ming <ming@teluu.com> | 2011-03-23 06:08:36 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2011-03-23 06:08:36 +0000 |
commit | e538ab09fe8139da507eeab044243a79e6bf9ba2 (patch) | |
tree | e46b8c9f44f55d91155649d01ed12a1558606914 /pjsip | |
parent | cc4a3ae0cbdb2d86ce6480d030006c9592375baa (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.c | 5 | ||||
-rw-r--r-- | pjsip/src/pjsip/sip_transport_tls.c | 5 | ||||
-rw-r--r-- | pjsip/src/pjsip/sip_transport_tls_ossl.c | 5 |
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; |