当调用LwIP netconn_accept()
或netconn_recv()
函数时,如果我们使用的是RTOS,它会阻塞线程并等待连接直到超时或永远,取决于 LWIP_SO_RCVTIME0
的设置。超时持续时间等于 SYS_ARCH_TIMEOUT
。
SYS_ARCH_TIMEOUT
在内核中定义为 0xffffffff 包含 LwIP 堆栈的一部分,因此我认为它不会被更改。
实际上,我希望它检查是否建立了连接,如果没有则继续线程。但是,如果我调用 netconn_accept()
,它只会阻塞线程并永远(或很长时间)等待...我不想改变 的定义值>SYS_ARCH_TIMEOUT
因为我在不同的情况下需要不同的超时...
这样做的好方法是什么?谢谢。
最佳答案
轮询 TCP 连接(或接受)通常是一种不好的做法。考虑生成一个专用于阻塞 netconn_accept() 调用的新线程。
我了解使用 RTOS 的局限性,但仅生成一个具有最小堆栈空间的辅助线程应该不是主要问题。
我相信实现经典的解决方案 Producer-Consumer problem没那么难。
如果您谈论的是 FreeRTOS,它拥有所有需要的工具 - 信号量和线程。
关于c - LWIP + RTOS - 如何避免 netconn 永远阻塞线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10848851/