c - LWIP + RTOS - 如何避免 netconn 永远阻塞线程?

标签 c network-programming embedded rtos lwip

当调用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/

相关文章:

linux - sed 在不同的平台上返回不同的结果

c - GTK+ : issues passing data to call_back functions

c - 如何在 C 中将指针分配给结构中的二维数组?

c - 为什么使用存储类说明符来确定两个独立的属性?

c - 我应该对网络命令使用#defines 还是枚举?

linux - 如果没有/etc/timezone 文件或/usr/share/zoneinfo,我如何在 Linux 中设置时区

C 二维数组输入

linux - 使用 NFQUEUE 的 TCP 数据包处理

c - 使用 libpcap 同时监听两个设备

embedded - MAC 地址有多独特