LWIP完全剖析详解之core/tcp.c
(2016-05-26 16:29:15)分类: LWIP |
#include "lwipopt.h" //选项头文件,lwip一些配置的选项包含在opt.h,debug开启和内存大小等配置信息
#if LWIP_TCP
#include "lwip/def.h" //定义项头文件,包括一些宏
#include "lwip/mem.h" //内存头文件,包括一些宏,内存大小,申请内存,内存对齐
#include "lwip/memp.h" //内存池头文件,包含内存申请,内存释放
#include "lwip/snmp.h" //SNMP(Simple Network Management
Protocol,简单网络管理协议),包含snmp的函数声明
#include "lwip/tcp.h" //包含tcp.c里面定义的函数声明和所用到的宏
#include "lwip/debug.h" //包含lwip debug的一些宏,开启debug
#include
u32_t tcp_ticks; //定义tcp的滴答数
const u8_t tcp_backoff[13] =
{ 1, 2, 3, 4, 5, 6, 7, 7, 7,
7, 7, 7, 7};
const u8_t tcp_persist_backoff[7] = { 3, 6, 12, 24, 48, 96, 120 };
struct tcp_pcb *tcp_bound_pcbs;
union tcp_listen_pcbs_t tcp_listen_pcbs;
struct tcp_pcb *tcp_active_pcbs;
struct tcp_pcb *tcp_tw_pcbs;
struct tcp_pcb *tcp_tmp_pcb;
static u8_t tcp_timer;
static u16_t tcp_new_port(void);
void
tcp_tmr(void)
{
tcp_fasttmr();
if (++tcp_timer & 1) {//tcp_timer加1后与1
tcp_slowtmr();
}
}
err_t
tcp_close(struct tcp_pcb *pcb)
{
err_t err;
//TCP debug信息,打印pcb的状态
#if TCP_DEBUG
LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in
"));
tcp_debug_print_state(pcb->state);
#endif
switch (pcb->state) {
case CLOSED:
err = ERR_OK;//设定返回值
TCP_RMV(&tcp_bound_pcbs,
pcb);//从绑定的pcb列表中去掉pcb
memp_free(MEMP_TCP_PCB,
pcb);//在MEMP_TCP_PCB内存池设定释放掉的pcb对应的单元值,释放内存
pcb = NULL; //设置pcb指针指向空
break;
case LISTEN:
err = ERR_OK;//设定返回值
tcp_pcb_remove((struct
tcp_pcb **)&tcp_listen_pcbs.pcbs, pcb);//在tcp PCB监听列表中删除对应的pcb
memp_free(MEMP_TCP_PCB_LISTEN,
pcb);//在MEMP_TCP_PCB_LISTEN对应的内存池中设定需要释放的pcb单元值