Changeset 6003


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

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

Location:
pjproject/trunk
Files:
2 edited

Legend:

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

    r5970 r6003  
    10301030            PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0 
    10311031                /* Special treatment for dead UDP sockets here, see ticket #1107 */ 
    1032                 if (status==PJ_STATUS_FROM_OS(EPIPE) && !IS_CLOSING(key) && 
    1033                     key->fd_type==pj_SOCK_DGRAM() && !restart_retry) 
     1032                if (status == PJ_STATUS_FROM_OS(EPIPE) && !IS_CLOSING(key) && 
     1033                    key->fd_type == pj_SOCK_DGRAM()) 
    10341034                { 
    1035                     PJ_PERROR(4,(THIS_FILE, status, 
    1036                                  "Send error for socket %d, retrying", 
    1037                                  key->fd)); 
    1038                     replace_udp_sock(key); 
    1039                     restart_retry = PJ_TRUE; 
    1040                     goto retry_on_restart; 
     1035                    if (!restart_retry) { 
     1036                        PJ_PERROR(4, (THIS_FILE, status, 
     1037                                      "Send error for socket %d, retrying", 
     1038                                      key->fd)); 
     1039                        replace_udp_sock(key); 
     1040                        restart_retry = PJ_TRUE; 
     1041                        goto retry_on_restart; 
     1042                    } else { 
     1043                        status = PJ_ESOCKETSTOP; 
     1044                    } 
    10411045                } 
    10421046#endif 
  • 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.