乐鑫技术交流
直播中

王凯

8年用户 1388经验值
私信 关注
[问答]

使用espconn_set_opt设置了TCP断开连接后立刻释放内存,好像不生效,怎么解决?

在使用espconn_set_opt设置了TCP断开连接后立刻释放内存,好像不生效。我用的是以下的设置方法:


err=espconn_set_opt(conn,ESPCONN_REUSEADDR);


每次TCP被动断开连接后仍然会占用内存2分钟,2分钟后才准时释放。然后下一个TCP才能正常发送,不然一直报内存错误。
而我用以下函数来注册write_finish_callback的时候是有效的,取消设置则无法进入writefinishcallback。所以应该不是函数使用的问题吧?
espconn_set_opt(conn,ESPCONN_COPY);
                             

回帖(1)

李丹

2024-7-10 17:50:25
从您的描述来看,您已经尝试使用`espconn_set_opt`来设置TCP断开连接后立刻释放内存,但是没有达到预期效果。这里有几个建议供您参考:

1. 确保您的ESP8266固件版本是最新的。有时候,旧版本的固件可能存在一些已知的问题,升级到最新版本可能会解决这些问题。

2. 检查您的代码逻辑,确保在TCP连接断开后,您正确地调用了`espconn_disconnect`函数来关闭连接。如果连接没有被正确关闭,可能会导致内存没有被释放。

3. 您可以尝试使用`ESPCONN_COPY`选项来替代`ESPCONN_REUSEADDR`。`ESPCONN_COPY`选项可以使TCP连接在断开后立即释放内存,但是需要注意的是,使用`ESPCONN_COPY`时,您需要手动复制数据到另一个缓冲区,然后再发送。

4. 如果您仍然遇到问题,可以尝试在ESP8266社区或者论坛上寻求帮助,看看是否有其他开发者遇到过类似的问题,并找到了解决方案。

5. 另外,您可以尝试使用其他库或者工具来实现TCP连接,例如lwIP库,看看是否能解决您的问题。

希望这些建议能对您有所帮助。如果问题仍然存在,请随时提供更多信息,以便我们更好地帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分