STM32
直播中

余温重顾

9年用户 912经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信 关注
[问答]

用CubeMX生成LwIP项目,发送使用netconn_write时,会返回错误码-6无法发送的原因?

现象:用CubeMX生成LwIP(LwIP2.0.3版本)项目,netconn编程,接收没有问题,发送使用netconn_write时,会返回错误码-6(Illegal value),无法发送。而用LwIP2.0.0版本时,没有这个问题。
原因查找:当前开启了LWIP_SO_SNDtiMEO,设置了send_timeout不为0。

解决办法:1.把send_timeout设为0(不知道会不会带来其他问题)。
                2.或者把MiddlewaresThird_PartyLwIPsrcapi里的api_lib.cnetconn_write_partly函数下

#if LWIP_SO_SNDTIMEO
  if (conn->send_timeout != 0) {
    dontblock = 1;
  }
#endif /* LWIP_SO_SNDTIMEO */

里的"dontblock = 1;"注释掉。(未验证是否会带来其他问题)

请知道的大哥告诉一下是否是LwIP库的BUG?或应该如何设置send_timeout?

回帖(2)

黄淳

2024-4-3 11:14:41
cubeide下,就算不设置发送超时,连续发送几分钟后,也会死掉。同样的程序,在keil MDK下,就没有任何问题。
举报

lique

2024-4-3 16:02:11
问题的原因是当前开启了LWIP_SO_SNDTIMEO,即发送超时的功能,并且设置了send_timeout不为0。这导致了使用netconn_write时发送失败并返回错误码-6(Illegal value)。

解决办法有两种:

1. 将send_timeout设为0。这样可以解决发送失败的问题,但可能会引发其他问题,需要根据具体情况来判断是否可行。

2. 修改Middlewares/Third_Party/LwIP/src/api/api_lib.c中的netconn_write_partly函数。找到#if LWIP_SO_SNDTIMEO的条件判断,并将其注释掉。这样可以绕过发送超时功能,解决发送失败的问题。

需要注意的是,修改LwIP源代码可能会影响到其他部分的功能,因此在修改之前应该先进行测试,确保修改不会引发其他问题。
举报

更多回帖

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