LwIP 代码分析(netconn绑定/netconn_connect连接) – 第三集

/ 0评 / 2

之前已经分析到申请,申请其实就是申请内存,netconn_bind就是绑定,我们国内的环境基本都是IPV4 Only,所以也就IPV4吧,发现里面还是调用了netconn_apimsg这个函数.

netconn_apimsg这个就是个等待,等待系统的锁啊什么有效,我们不用再分析,直接去看lwip_netconn_do_bind,再次核实conn的pcb是有申请到的,然后根据UDP进UDP绑定流程.(看来UDP-Lite不用绑定)

根据914行的描述,绑定的时候是可以不指定port的,那么系统自己分配一个.

如果指定了PORT,那么就搜索所有PCB(这个可不是板子),然后确实这个PORT没被占用,那么就用它吧.否则就返回ERR_USE错误了.
最后在949行,把local port这个数值赋值了,完成了一个绑定.

mib2_udp_bind是个callback,这里没有实现.为了程序简单,也不冲突,不是特别需要,看来应该把PORT写为0.程序就会去搜索还没被占用的端口.

范围是UDP_LOCAL_PORT_RANGE_START到UDP_LOCAL_PORT_RANGE_END,默认是49152 - 65535.都是高位端口,一般没人吃.
所以,整个netconn_bind主要做了以下几步:

  1. 找个端口,或者验证以下端口是否能用
  2. 写本地IP(通常pcb->local_ip = IP_ADDR_ANY就是把本机所有网卡都绑定了.)
  3. 把端口绑定在PCB上.(直接赋值,以后发东西查找端口)

然后,udp_connect同理,就是把pcb->remote_ip和port填上去.这里port就不能为0了.然后设置一个连接上标志,插入到pcb里面,就算OK了.
思考:为什么不人工直接写数值?好像也行得通.只是饶过了很多安全措施.
以下代码等效udp_connect,只是在这个文件没法找到udp的struct定义.

看起来就像LwIP吃了我们好多带宽一样,这其实都是为了开发方便把.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注