网络编程中bind使用INADDR_ANY个人理解

        在lwip中无论使用socket还是netconn接口,都需要调用bind与本地的IP与端口进行绑定。在一些网络编程入门教程中,选择INADDR_ANY作为本地绑定的IP,而端口号则固定。

    /*绑定本地IP与PORT*/
    netconn_bind(conn, IP_ADDR_ANY, UDP_SEVER_PORT);

        在lwip中,可以看到INADDR_ANY即为0.0.0.0这个IP。

/** 0.0.0.0 */
#define IPADDR_ANY          ((u32_t)0x00000000UL)

        这么做的目的是,即表示所有发送到服务器的这个端口,不管是哪个网卡/哪个IP地址接收到的 数据,都由这个服务端进程进行处理。

        那么,这个宏定义到底是什么含义呢? 这个宏能够让程序员在不知道本机IP地址的情况下,使用它来代表本机所有接口的IP地址。也就是说,使用这个宏作为监听地址的话,不管本机有多少个接口,socket都会监听。

        举个例子,假设一个主机有inter1,inter2,inter3三个接口,如果一个socket绑定了INADDR_ANY的地址和8000 的端口,那么,从客户端过来的一个UDP包到达该主机,不管客户端connect的是inter1,inter2,inter3中的哪个地址,都会被该socket接收到。如果此时主机还要再建立一个新的socket,使用inter1接口和端口8000,将会失败, 因为这个端口和地址已经被第一个socket监听了。 上面是接收的情况,那么,发送数据报给客户端的时候,到底是用哪个接口发送呢? 这个就是根据本机路由表的配置情况,选择最合适的路径对应的接口来发送。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值