完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
下图1可以看到,配置了LWIP的连接数量是5,然后在PC机的客户端TCP工具重复打开-关闭的操作,到达5次之后,再也无法连接,提示如图2的错误,跟踪代码感觉应该是资源没有释放,但是程序里已经调用了closesocket()函数,为什么还会不释放资源呢?,代码如图3,这个是我操作的问题,还是lwip的问题呢?lwip版本2.1.2 图1 图2 { int s_fd = -1,rtn = -1; int c_fd; struct sockaddr_in addr_in,addr_client; unsigned int port = 8080; s_fd=socket(AF_INET,SOCK_STREAM,0); //创建套接字 memset(&addr_in,0,sizeof(struct sockaddr_in)); memset(&addr_client,0,sizeof(struct sockaddr_in)); addr_in.sin_family = AF_INET; addr_in.sin_port = htons(port); addr_in.sin_addr.s_addr= htonl(INADDR_ANY);//inet_addr("192.168.2.100"); //接受来自任何client的请求。 char net_rx_buffer[256]; int on = 1,len,rdlen = -1; if(bind(s_fd,(struct sockaddr*)&addr_in,sizeof(struct sockaddr))==-1) { rt_kprintf("error2\r\n"); } rtn = listen(s_fd,10); rt_thread_delay(100); while(1) { c_fd = accept(s_fd,(struct sockaddr*)&addr_client,(socklen_t *)&len); while(1) { memset(net_rx_buffer,0,256); rdlen = recv(c_fd,net_rx_buffer,256,0); // rdlen = read(c_fd,net_rx_buffer,256); if (rdlen > 0) { rt_kprintf("%s",net_rx_buffer); } else { closesocket(c_fd); break; } rt_thread_delay(5); } } } |
|
相关推荐
2个回答
|
|
|
|
我后来看LWIP的调试信息,怀疑close后资源没有释放,后来跟踪发现sockets_priv.h里LWIP_NETCONN_FULLDUPLEX这个宏定义打开的,这个打开之后,close()跟踪到最后的执行函数,这个宏框柱的部分没法释放资源,把这个宏关闭就可以了。本来当初看这个宏的名字觉得是全双工开关,才打开这个宏。可能这个用法需要联合其它宏吧,这个我就没再深入研究了。LWIP的开关太多了,想用好,得了解这里的关系,不太容易啊。不过非常感谢你回答我,非常感谢,也给我提供了一个知识点让我继续深入探究。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
1381 浏览 0 评论
2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
6135 浏览 10 评论
1756 浏览 0 评论
IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书
3164 浏览 0 评论
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
1185 浏览 0 评论
67685 浏览 21 评论
嵌入式热门DIY项目:智能机器人开源资料合集(原理图、代码、论文)
68513 浏览 22 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-9 18:16 , Processed in 0.666328 second(s), Total 71, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号