Ignore:
Timestamp:
May 23, 2019 5:47:55 PM (3 years ago)
Author:
riza
Message:

Close #2201: Restart UDP transport after replace_udp_socket fail when sending data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsip/sip_transport_udp.c

    r5991 r6003  
    143143        goto on_return; 
    144144 
    145 #if defined(PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT) && \ 
    146             PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0 
    147145    if (-bytes_read == PJ_ESOCKETSTOP) { 
    148146        --tp->read_loop_spin; 
     
    162160        return; 
    163161    } 
    164 #endif 
    165162 
    166163    /* 
     
    325322    tdata_op_key->tdata = NULL; 
    326323 
    327 #if defined(PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT) && \ 
    328             PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0 
    329324    if (-bytes_sent == PJ_ESOCKETSTOP) { 
    330325        pj_status_t status; 
     
    344339        return; 
    345340    } 
    346 #endif 
    347341 
    348342    if (tdata_op_key->callback) { 
     
    386380                               rem_addr, addr_len); 
    387381 
    388     if (status != PJ_EPENDING) 
     382    if (status != PJ_EPENDING) { 
     383        if (status == PJ_ESOCKETSTOP) { 
     384            /* Try to recover by restarting the transport. */ 
     385            PJ_LOG(4,(tp->base.obj_name, "Restarting SIP UDP transport")); 
     386            status = pjsip_udp_transport_restart2( 
     387                                &tp->base, 
     388                                PJSIP_UDP_TRANSPORT_DESTROY_SOCKET, 
     389                                PJ_INVALID_SOCKET, 
     390                                &tp->base.local_addr, 
     391                                &tp->base.local_name); 
     392 
     393            if (status != PJ_SUCCESS) { 
     394                PJ_PERROR(1,(THIS_FILE, status, 
     395                             "Error restarting SIP UDP transport")); 
     396            } 
     397        } 
    389398        tdata->op_key.tdata = NULL; 
     399    } 
    390400 
    391401    return status; 
Note: See TracChangeset for help on using the changeset viewer.