完善资料让更多小伙伴认识你,还能领取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的开关太多了,想用好,得了解这里的关系,不太容易啊。不过非常感谢你回答我,非常感谢,也给我提供了一个知识点让我继续深入探究。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1033 浏览 0 评论
2877 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9386 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2898 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2302 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 04:35 , Processed in 0.659925 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1461