Ignore:
Timestamp:
Jun 19, 2013 9:06:55 AM (7 years ago)
Author:
nanang
Message:

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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/sock_common.c

    r4343 r4538  
    10801080 
    10811081 
     1082/* 
     1083 * Adjust socket send/receive buffer size. 
     1084 */ 
     1085PJ_DEF(pj_status_t) pj_sock_setsockopt_sobuf( pj_sock_t sockfd, 
     1086                                              pj_uint16_t optname, 
     1087                                              pj_bool_t auto_retry, 
     1088                                              unsigned *buf_size) 
     1089{ 
     1090    pj_status_t status; 
     1091    int try_size, cur_size, i, step, size_len; 
     1092    enum { MAX_TRY = 20 }; 
     1093 
     1094    PJ_CHECK_STACK(); 
     1095 
     1096    PJ_ASSERT_RETURN(sockfd != PJ_INVALID_SOCKET && 
     1097                     buf_size && 
     1098                     *buf_size > 0 && 
     1099                     (optname == pj_SO_RCVBUF() || 
     1100                      optname == pj_SO_SNDBUF()), 
     1101                     PJ_EINVAL); 
     1102 
     1103    size_len = sizeof(cur_size); 
     1104    status = pj_sock_getsockopt(sockfd, pj_SOL_SOCKET(), optname, 
     1105                                &cur_size, &size_len); 
     1106    if (status != PJ_SUCCESS) 
     1107        return status; 
     1108 
     1109    try_size = *buf_size; 
     1110    step = (try_size - cur_size) / MAX_TRY; 
     1111    if (step < 4096) 
     1112        step = 4096; 
     1113 
     1114    for (i = 0; i < (MAX_TRY-1); ++i) { 
     1115        if (try_size <= cur_size) { 
     1116            /* Done, return current size */ 
     1117            *buf_size = cur_size; 
     1118            break; 
     1119        } 
     1120 
     1121        status = pj_sock_setsockopt(sockfd, pj_SOL_SOCKET(), optname, 
     1122                                    &try_size, sizeof(try_size)); 
     1123        if (status == PJ_SUCCESS) { 
     1124            status = pj_sock_getsockopt(sockfd, pj_SOL_SOCKET(), optname, 
     1125                                        &cur_size, &size_len); 
     1126            if (status != PJ_SUCCESS) { 
     1127                /* Ops! No info about current size, just return last try size 
     1128                 * and quit. 
     1129                 */ 
     1130                *buf_size = try_size; 
     1131                break; 
     1132            } 
     1133        } 
     1134 
     1135        if (!auto_retry) 
     1136            break; 
     1137 
     1138        try_size -= step; 
     1139    } 
     1140 
     1141    return status; 
     1142} 
     1143 
     1144 
    10821145/* Only need to implement these in DLL build */ 
    10831146#if defined(PJ_DLL) 
Note: See TracChangeset for help on using the changeset viewer.