コード例 #1
0
ファイル: espconn_tcp.c プロジェクト: Nicholas3388/LuaNode
// 				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;
	}
}
コード例 #2
0
ファイル: espconn_tcp.c プロジェクト: AlexShadow/esp8266web
/******************************************************************************
 * 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);
    }
}
コード例 #3
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);
    }
}