// if (pespconn->proto.tcp->write_finish_fn != NULL) { // pespconn->proto.tcp->write_finish_fn(pespconn); // } // } // break; // case SIG_ESPCONN_ERRER: // /*remove the node from the client's active connection list*/ // espconn_list_delete(&plink_active, task_msg); // espconn_tcp_reconnect(task_msg); // break; // case SIG_ESPCONN_CLOSE: // /*remove the node from the client's active connection list*/ // espconn_list_delete(&plink_active, task_msg); // espconn_tcp_disconnect_successful(task_msg); // break; // default: // break; // } // } // } static void ICACHE_FLASH_ATTR espconn_Task(ETSEvent *events) { espconn_msg *task_msg = NULL; struct espconn *pespconn = NULL; printf("events->sig %d\n", events->sig); task_msg = (espconn_msg *) events->par; switch (events->sig) { case SIG_ESPCONN_WRITE: { pespconn = task_msg->pespconn; if (pespconn == NULL) { return; } if (pespconn->proto.tcp->write_finish_fn != NULL) { pespconn->proto.tcp->write_finish_fn(pespconn); } } break; case SIG_ESPCONN_ERRER: /*remove the node from the client's active connection list*/ espconn_list_delete(&plink_active, task_msg); espconn_tcp_reconnect(task_msg); break; case SIG_ESPCONN_CLOSE: /*remove the node from the client's active connection list*/ espconn_list_delete(&plink_active, task_msg); espconn_tcp_disconnect_successful(task_msg); break; default: break; } }
/****************************************************************************** * FunctionName : espconn_closed * Description : The connection has been successfully closed. * Parameters : arg -- Additional argument to pass to the callback function * Returns : none *******************************************************************************/ static void ICACHE_FLASH_ATTR espconn_sclose_cb(void *arg) { espconn_msg *psclose_cb = arg; if (psclose_cb == NULL) { return; } struct tcp_pcb *pcb = find_tcpsrv_pcb(psclose_cb); // added PV` // espconn_printf("espconn_sclose_cb %d %d\n", pcb->state, pcb->nrtx); if ((pcb == NULL) || (pcb->state == CLOSED) || (pcb->state == TIME_WAIT)) { // corrected PV` psclose_cb ->pespconn ->state = ESPCONN_CLOSE; /*remove the node from the server's active connection list*/ espconn_list_delete(&plink_active, psclose_cb); espconn_tcp_disconnect_successful(psclose_cb); } else { os_timer_arm(&psclose_cb->pcommon.ptimer, TCP_FAST_INTERVAL, 0); } }
/****************************************************************************** * FunctionName : espconn_closed * Description : The connection has been successfully closed. * Parameters : arg -- Additional argument to pass to the callback function * Returns : none *******************************************************************************/ static void espconn_sclose_cb(void *arg) { espconn_msg *psclose_cb = arg; if (psclose_cb == NULL) { return; } struct tcp_pcb *pcb = psclose_cb ->pcommon.pcb; espconn_printf("espconn_sclose_cb %d %d\n", pcb->state, pcb->nrtx); if (pcb->state == CLOSED || pcb->state == TIME_WAIT) { psclose_cb ->pespconn ->state = ESPCONN_CLOSE; /*remove the node from the server's active connection list*/ espconn_list_delete(&plink_active, psclose_cb); espconn_tcp_disconnect_successful(psclose_cb); } else { os_timer_arm(&psclose_cb->pcommon.ptimer, TCP_FAST_INTERVAL, 0); } }