现在的位置: 首页 > 综合 > 正文

lwIP(V1.3.0) RAW API函数源码分析2—-tcp_bind()函数

2013年08月11日 ⁄ 综合 ⁄ 共 2809字 ⁄ 字号 评论关闭

位于: 位于:lwip-x.x.x/src/core/tcp.c

原型: err_t  tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)

功能:绑定连接到一个本地端口号和IP地址.

函数源码:

分析:这个函数的大部分代码用于检验给出的IP地址和端口号是否合适,如果合适则将给出的IP地址和端口号赋给当前PCB,更新已绑定tcp_pcb列表并返回ERR_OK.如果给出的参数不合适,则返回ERR_USE.

参数ipaddr如果为IP_ADDR_ANY,表示绑定到任何本地地址,那么IP_ADDR_ANY是什么呢?lwip-1.3.0/src/include/ipv4/lwip/ip_addr.h中定义了:

 #define IP_ADDR_ANY         ((struct ip_addr *)&ip_addr_any)

ip_addr_any是一个ip_addr型变量,lwip-1.3.0/src/core/ipv4/ip_addr.c中有如下声明:

                   #define IP_ADDR_ANY_VALUE 0x00000000UL

const struct ip_addr ip_addr_any = { IP_ADDR_ANY_VALUE };

所以, IP_ADDR_ANY是等于0x00000000UL. IP地址上规定  0.0.0.0为广播地址,也就是任意地址的意思.

 

1:在tcp.h中有如下定义:

/* The TCP PCB lists. TCP PCB列表*/

union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. 进入监听状态的所有TCP PCB列表*/

  struct tcp_pcb_listen *listen_pcbs;

  struct tcp_pcb *pcbs;

};

extern union tcp_listen_pcbs_t tcp_listen_pcbs;

 

 

抱歉!评论已关闭.