diff options
Diffstat (limited to 'pjmedia/src/pjmedia/transport_udp.c')
-rw-r--r-- | pjmedia/src/pjmedia/transport_udp.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/transport_udp.c b/pjmedia/src/pjmedia/transport_udp.c index 3e288c74..70f16d6d 100644 --- a/pjmedia/src/pjmedia/transport_udp.c +++ b/pjmedia/src/pjmedia/transport_udp.c @@ -693,6 +693,48 @@ static pj_status_t transport_attach( pjmedia_transport *tp, udp->rtp_src_cnt = 0; udp->rtcp_src_cnt = 0; + /* Set buffer size for RTP socket */ +#if PJMEDIA_TRANSPORT_SO_RCVBUF_SIZE + { + unsigned sobuf_size = PJMEDIA_TRANSPORT_SO_RCVBUF_SIZE; + pj_status_t status; + status = pj_sock_setsockopt_sobuf(udp->rtp_sock, pj_SO_RCVBUF(), + PJ_TRUE, &sobuf_size); + if (status != PJ_SUCCESS) { + pj_perror(3, tp->name, status, "Failed setting SO_RCVBUF"); + } else { + if (sobuf_size < PJMEDIA_TRANSPORT_SO_RCVBUF_SIZE) { + PJ_LOG(4, (tp->name, + "Warning! Cannot set SO_RCVBUF as configured, " + "now=%d, configured=%d", + sobuf_size, PJMEDIA_TRANSPORT_SO_RCVBUF_SIZE)); + } else { + PJ_LOG(5, (tp->name, "SO_RCVBUF set to %d", sobuf_size)); + } + } + } +#endif +#if PJMEDIA_TRANSPORT_SO_SNDBUF_SIZE + { + unsigned sobuf_size = PJMEDIA_TRANSPORT_SO_SNDBUF_SIZE; + pj_status_t status; + status = pj_sock_setsockopt_sobuf(udp->rtp_sock, pj_SO_SNDBUF(), + PJ_TRUE, &sobuf_size); + if (status != PJ_SUCCESS) { + pj_perror(3, tp->name, status, "Failed setting SO_SNDBUF"); + } else { + if (sobuf_size < PJMEDIA_TRANSPORT_SO_SNDBUF_SIZE) { + PJ_LOG(4, (tp->name, + "Warning! Cannot set SO_SNDBUF as configured, " + "now=%d, configured=%d", + sobuf_size, PJMEDIA_TRANSPORT_SO_SNDBUF_SIZE)); + } else { + PJ_LOG(5, (tp->name, "SO_SNDBUF set to %d", sobuf_size)); + } + } + } +#endif + /* Unlock keys */ pj_ioqueue_unlock_key(udp->rtcp_key); pj_ioqueue_unlock_key(udp->rtp_key); |