此篇博客用来记录 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 时,使用默认方式关闭
到此这篇esp32udp广播模式(esp32 udp广播)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!注:这部分的参考资料点击 这里。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/haskellbc/73890.html