完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在编写基于ESP8266_RTOS_SDK的 tcp 客户端示例。
我正在使用 socket(), connect(),close() ...函数直接而不是 espconn_xxxx() api。 当我为TCP客户端设置保持活动状态参数时: ... client_fd= socket(); ... int keepAlive = 1; //enable keepalive int keepIdle = 10; //60s int keepInterval = 5; //5s int keepCount = 3; //retry times rslt = setsockopt(client_fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive)); rslt = setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle)); rslt = setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval)); rslt = setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount)); ... connect(client_fd); ... 似乎 setsockopt 函数不起作用。 当服务器关闭套接字时,ESP8266 似乎没有在正确的时间知道这一点。 换句话说,当服务器关闭套接字时,recv() 不会在 10 5*3 = 25 秒内返回 -1。recv() 总是在 2 分钟内返回 -1。 |
|
相关推荐
1个回答
|
|
在这种情况下,可能有以下几个原因导致 ESP8266 TCP 保持活动状态功能不起作用:
1. **SDK版本问题**:确保你使用的 ESP8266_RTOS_SDK 是最新版本,因为旧版本可能存在一些已知的问题或不支持某些功能。 2. **函数使用错误**:在使用 `socket()`, `connect()`, `close()` 等函数时,请确保你正确地使用了它们。例如,在使用 `setsockopt()` 函数时,你需要确保传入正确的参数,如 `client_fd`(套接字描述符)和 `SO_KEEPALIVE`(保持活动状态选项)。 3. **参数设置问题**:检查你设置的参数是否正确。例如,`keepIdle`, `keepInterval`, `keepCount` 等参数的值是否符合预期。如果参数设置不正确,可能导致保持活动状态功能无法正常工作。 4. **网络环境问题**:网络环境可能影响 TCP 保持活动状态功能。例如,网络延迟、丢包等问题可能导致保持活动状态功能无法正常工作。 5. **ESP8266硬件问题**:ESP8266硬件本身可能存在问题,导致 TCP 保持活动状态功能无法正常工作。你可以尝试使用其他 ESP8266 模块或设备进行测试,以排除硬件问题。 为了解决这个问题,你可以尝试以下步骤: 1. 确保使用最新版本的 ESP8266_RTOS_SDK。 2. 检查代码中 `setsockopt()` 函数的使用是否正确。例如: ```c int rslt = setsockopt(client_fd, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(keepAlive)); ``` 3. 检查 `keepIdle`, `keepInterval`, `keepCount` 等参数的设置是否正确。 4. 检查网络环境,确保网络连接稳定。 5. 尝试使用其他 ESP8266 模块或设备进行测试,以排除硬件问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 19:33 , Processed in 0.690572 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号