461 |
/* Steps through all of the active PCBs. */ |
/* Steps through all of the active PCBs. */ |
462 |
prev = NULL; |
prev = NULL; |
463 |
pcb = tcp_active_pcbs; |
pcb = tcp_active_pcbs; |
464 |
|
if (pcb == NULL) DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs")); |
465 |
while(pcb != NULL) { |
while(pcb != NULL) { |
466 |
|
DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb")); |
467 |
ASSERT("tcp_timer_coarse: active pcb->state != CLOSED", pcb->state != CLOSED); |
ASSERT("tcp_timer_coarse: active pcb->state != CLOSED", pcb->state != CLOSED); |
468 |
ASSERT("tcp_timer_coarse: active pcb->state != LISTEN", pcb->state != LISTEN); |
ASSERT("tcp_timer_coarse: active pcb->state != LISTEN", pcb->state != LISTEN); |
469 |
ASSERT("tcp_timer_coarse: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); |
ASSERT("tcp_timer_coarse: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); |
472 |
|
|
473 |
if(pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) { |
if(pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) { |
474 |
++pcb_remove; |
++pcb_remove; |
475 |
} else if(pcb->nrtx == TCP_MAXRTX) { |
DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached")); |
476 |
|
} |
477 |
|
else if(pcb->nrtx == TCP_MAXRTX) { |
478 |
++pcb_remove; |
++pcb_remove; |
479 |
|
DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached")); |
480 |
} else { |
} else { |
481 |
++pcb->rtime; |
++pcb->rtime; |
482 |
if(pcb->unacked != NULL && pcb->rtime >= pcb->rto) { |
if(pcb->unacked != NULL && pcb->rtime >= pcb->rto) { |
511 |
if((u32_t)(tcp_ticks - pcb->tmr) > |
if((u32_t)(tcp_ticks - pcb->tmr) > |
512 |
TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { |
TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { |
513 |
++pcb_remove; |
++pcb_remove; |
514 |
|
DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in FIN-WAIT-2")); |
515 |
} |
} |
516 |
} |
} |
517 |
|
|
524 |
pcb->rto * TCP_OOSEQ_TIMEOUT) { |
pcb->rto * TCP_OOSEQ_TIMEOUT) { |
525 |
tcp_segs_free(pcb->ooseq); |
tcp_segs_free(pcb->ooseq); |
526 |
pcb->ooseq = NULL; |
pcb->ooseq = NULL; |
527 |
|
DEBUGF(TCP_CWND_DEBUG, ("tcp: dropping OOSEQ queued data\n")); |
528 |
} |
} |
529 |
#endif /* TCP_QUEUE_OOSEQ */ |
#endif /* TCP_QUEUE_OOSEQ */ |
530 |
|
|
533 |
if((u32_t)(tcp_ticks - pcb->tmr) > |
if((u32_t)(tcp_ticks - pcb->tmr) > |
534 |
TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { |
TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { |
535 |
++pcb_remove; |
++pcb_remove; |
536 |
|
DEBUGF(TCP_DEBUG, ("tcp_slottmr: removing pcb stuck in SYN-RCVD\n")); |
537 |
} |
} |
538 |
} |
} |
539 |
|
|
562 |
++pcb->polltmr; |
++pcb->polltmr; |
563 |
if(pcb->polltmr >= pcb->pollinterval) { |
if(pcb->polltmr >= pcb->pollinterval) { |
564 |
pcb->polltmr = 0; |
pcb->polltmr = 0; |
565 |
|
DEBUGF(TCP_DEBUG, ("tcp_slottmr: polling application\n")); |
566 |
TCP_EVENT_POLL(pcb, err); |
TCP_EVENT_POLL(pcb, err); |
567 |
if(err == ERR_OK) { |
if(err == ERR_OK) { |
568 |
tcp_output(pcb); |
tcp_output(pcb); |
966 |
if(pcb->unacked != NULL) { |
if(pcb->unacked != NULL) { |
967 |
DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); |
DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); |
968 |
} |
} |
969 |
|
#if TCP_QUEUE_OOSEQ // LW |
970 |
if(pcb->ooseq != NULL) { |
if(pcb->ooseq != NULL) { |
971 |
DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); |
DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); |
972 |
} |
} |
973 |
|
#endif |
974 |
#endif /* TCP_DEBUG */ |
#endif /* TCP_DEBUG */ |
975 |
tcp_segs_free(pcb->unsent); |
tcp_segs_free(pcb->unsent); |
976 |
#if TCP_QUEUE_OOSEQ |
#if TCP_QUEUE_OOSEQ |