From 2ab98f7d75d9b16f493d9c89a6480a61c21ba3f4 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Tue, 16 Oct 2007 14:10:58 +0000 Subject: Tolerate more ICMP errors in ICE media transport git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1503 74dad513-b988-da41-8d7b-12977e46ad98 --- pjnath/src/pjnath/ice_strans.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'pjnath/src') diff --git a/pjnath/src/pjnath/ice_strans.c b/pjnath/src/pjnath/ice_strans.c index d44bec0c..f413b9c7 100644 --- a/pjnath/src/pjnath/ice_strans.c +++ b/pjnath/src/pjnath/ice_strans.c @@ -25,6 +25,7 @@ #include #include #include +#include #if 0 @@ -440,7 +441,7 @@ static void on_read_complete(pj_ioqueue_key_t *key, pj_ioqueue_get_user_data(key); pj_ice_strans *ice_st = comp->ice_st; pj_ssize_t pkt_size; - enum { RETRY = 4 }; + enum { RETRY = 10 }; unsigned retry; pj_status_t status; @@ -515,13 +516,21 @@ static void on_read_complete(pj_ioqueue_key_t *key, } /* Read next packet */ - for (retry=0; retrypkt); comp->src_addr_len = sizeof(comp->src_addr); status = pj_ioqueue_recvfrom(key, op_key, comp->pkt, &pkt_size, PJ_IOQUEUE_ALWAYS_ASYNC, &comp->src_addr, &comp->src_addr_len); - if (status != PJ_SUCCESS && status != PJ_EPENDING) { + if (status == PJ_STATUS_FROM_OS(OSERR_EWOULDBLOCK) || + status == PJ_STATUS_FROM_OS(OSERR_EINPROGRESS) || + status == PJ_STATUS_FROM_OS(OSERR_ECONNRESET)) + { + ice_st_perror(comp->ice_st, "ioqueue recvfrom() error", status); + ++retry; + continue; + } else if (status != PJ_SUCCESS && status != PJ_EPENDING) { + retry += 2; ice_st_perror(comp->ice_st, "ioqueue recvfrom() error", status); } else { break; -- cgit v1.2.3