diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2013-06-19 09:06:55 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2013-06-19 09:06:55 +0000 |
commit | 1229122bc17bb86b6a10e043aa3505715b797347 (patch) | |
tree | ae8a72fe1f020f77c31514b05fbd98af2fdcd434 /pjnath/src/pjnath/stun_sock.c | |
parent | d7aa4332dae06ae890053dd13239ddabee46b86c (diff) |
Close #1681:
- Added compile-time settings PJMEDIA_TRANSPORT_SO_RCVBUF_SIZE and PJMEDIA_TRANSPORT_SO_SNDBUF_SIZE. The default values are both 64 KB when PJMEDIA_HAS_VIDEO is set, otherwise just zero (socket buffer size uses OS default). The settings will be applied to media transport UDP and ICE.
- Also added run-time settings so_sndbuf_size and so_rcvbuf_size into ICE stream transport, STUN socket, and TURN socket. Default values are all zero.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4538 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath/src/pjnath/stun_sock.c')
-rw-r--r-- | pjnath/src/pjnath/stun_sock.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/pjnath/src/pjnath/stun_sock.c b/pjnath/src/pjnath/stun_sock.c index b0bad9e3..eadec9cb 100644 --- a/pjnath/src/pjnath/stun_sock.c +++ b/pjnath/src/pjnath/stun_sock.c @@ -237,6 +237,46 @@ PJ_DEF(pj_status_t) pj_stun_sock_create( pj_stun_config *stun_cfg, if (status != PJ_SUCCESS && !cfg->qos_ignore_error) goto on_error; + /* Apply socket buffer size */ + if (cfg->so_rcvbuf_size > 0) { + unsigned sobuf_size = cfg->so_rcvbuf_size; + status = pj_sock_setsockopt_sobuf(stun_sock->sock_fd, pj_SO_RCVBUF(), + PJ_TRUE, &sobuf_size); + if (status != PJ_SUCCESS) { + pj_perror(3, stun_sock->obj_name, status, + "Failed setting SO_RCVBUF"); + } else { + if (sobuf_size < cfg->so_rcvbuf_size) { + PJ_LOG(4, (stun_sock->obj_name, + "Warning! Cannot set SO_RCVBUF as configured, " + "now=%d, configured=%d", + sobuf_size, cfg->so_rcvbuf_size)); + } else { + PJ_LOG(5, (stun_sock->obj_name, "SO_RCVBUF set to %d", + sobuf_size)); + } + } + } + if (cfg->so_sndbuf_size > 0) { + unsigned sobuf_size = cfg->so_sndbuf_size; + status = pj_sock_setsockopt_sobuf(stun_sock->sock_fd, pj_SO_SNDBUF(), + PJ_TRUE, &sobuf_size); + if (status != PJ_SUCCESS) { + pj_perror(3, stun_sock->obj_name, status, + "Failed setting SO_SNDBUF"); + } else { + if (sobuf_size < cfg->so_sndbuf_size) { + PJ_LOG(4, (stun_sock->obj_name, + "Warning! Cannot set SO_SNDBUF as configured, " + "now=%d, configured=%d", + sobuf_size, cfg->so_sndbuf_size)); + } else { + PJ_LOG(5, (stun_sock->obj_name, "SO_SNDBUF set to %d", + sobuf_size)); + } + } + } + /* Bind socket */ max_bind_retry = MAX_BIND_RETRY; if (cfg->port_range && cfg->port_range < max_bind_retry) |