esp32udp广播模式(esp32 udp广播)

esp32udp广播模式(esp32 udp广播)此篇博客用来记录 ESP32 TCP UDP 相关应用层操作 首先列举出几个常用的 setsockopt option 启用地址复用 允许 socket 绑定处于 TIME WAIT 状态的相同端口的 IP 地址 启用 TCP 保活机制 用于服务器或客户端检测链接是否异常 默认值 IDLE 2 小时 INTVL 75 秒 CNT 9 次 设置函数 关闭 TCP 链接时的行为

大家好,我是讯享网,很高兴认识大家。



此篇博客用来记录 ESP32 TCP/UDP 相关应用层操作。首先列举出几个常用的 setsockopt option:

  • 启用地址复用,允许 socket 绑定处于 TIME-WAIT 状态的相同端口的 IP 地址
  • 启用 TCP 保活机制,用于服务器或客户端检测链接是否异常,默认值 IDLE:2 小时,INTVL:75 秒,CNT: 9 次
  • 设置函数 关闭 TCP 链接时的行为
  • 允许发送接收广播包,主要用于 IPv4 UDP 需要广播发送报文
  • 设置发送超时,适用于 send,write。如果超过时间,缓冲区还无法写入,会返回 -1 (错误为 ERR_WOULDBLOCK),如果写入一部分,返回写入的长度
  • 设置接收超时,适用于 read,recv,accept。如果超时时间内没收到数据,返回 -1,错误为 ERR_TIMEOUT
  • socket 接口绑定,用于多个接口的时候,让数据走指定的接口,类似于 bind
  • 设置 UDP 组播包时 IP 包头的 TTL,只针对 UDP 控制报文,默认 255
  • 设置是否禁止 Nagle(默认使能 Nagle 算法),使能 NODELAY 意味着禁用 Nagle 算法,允许发送小包,适用于敏感型,对延迟要求低的应用。禁用 NODELAY 意味这使能 Nagle 算法,数据在缓冲区累计到一定长度再发送,增大延迟,提高网络利用率,适用于吞吐要求高的应用。
  • 查询 socket 是否处于 listen 状态
  • 查询 socket 类型是 , 还是
  • 查询 socket 错误,一般配合 select error fd 使用,查询完后,errno 的值会被清 0

以下为具体的使用方法和场景。

先通过 选项使能 socket option(大部分 menuconfig 默认使能了此选项),每次创建 socket 后(bind 前)添加以下代码:

此时在此 socket 关闭后可立即使用同样的地址端口正常通信。

使能 TCP keepalive 并且设置 keepalive 的参考代码可以参考 这里,如下:


讯享网

如果关闭 socket,对端不回 FIN 导致 socket 处于 TIME_WAIT 状态, 在 close socket 的地方加 socket option 强制发送 RST 断开连接。此时先通过 选项使能 socket option,然后在关闭 socket 前添加以下代码:

此时需要注意这里的参数 和 :

  • 非 0, 为 0 时, 立刻关闭(RST)
  • 非 0, 非 0 时, 会等待 时间把缓冲区数据发完,到点立刻关闭
  • 为 0 时,使用默认方式关闭

注:这部分的参考资料点击 这里。

小讯
上一篇 2025-04-28 15:52
下一篇 2025-06-11 23:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/189126.html