答网友问——lwip内核工作状态、错误标志以及tcp_tmr函数的调用问题
(2012-12-07 22:31:55)
标签:
lwiprawtcp_tmrsequentialapi杂谈 |
分类: LwIP常见问题 |
网友来信:
五木您好!
回复:
你好,
(1) 看你的系统,ram是有点偏小,你的应用的数据量大吗?你们这种情况用RAW
API比较合适,注意自己合适的配置协议栈,不要让内存用超了。
(2)基于sequential
API编程时,我们都是基于open-read-write-close这种模式,其中open和read是阻塞的,如果对端关闭,这两个函数会返回NULL,这个时候你就能判断对端关闭了,此时你应调用netconn_close关闭本端连接;当是用RAW
API时,需要注册自己的数据接收函数,当对端关闭时,内核会回调你注册的数据接收函数,其进来的指针pbuf为NULL,此时你也可以判断对端关闭了。同时,你可以在数据接收函数里面直接使用控制块pcb->state判断连接当前的状态,并进行你相关的处理。具体的,你可以参见TCP状态机实现那节。
(3)tcp_tmr:如果是使用RAW
API编程的话,你需要自己周期性的调用这个函数,500ms为周期,具体参考我书上的相关代码;如果使用sequential
API编程,这个是协议栈自己完成的,调用的地方在邮箱等待函数或者信号量等待函数中,内核会同时对各个注册的超时时间进行处理,这里,tcp_tmr会被调用。