Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
socket
WIZnet_W5500
W5500堵塞接收,关闭socket错误
发布于 2021-01-14 19:53:24 浏览:2671
订阅该版
[tocm] ```c int main(void) { int ret = 0; int sock, bytes_received; struct server_addr; /* 通过网卡名称获取网卡对象,名称可以通过 ifconfig 命令查看 */ struct netdev *netdev = netdev_get_by_name("W5500"); if (netdev == RT_NULL) { rt_kprintf("not find network interface device name().\n"); return 0; } /* 设置默认网卡对象 */ netdev_set_default(netdev); if(sock != RT_NULL) { closesocket(sock); sock = RT_NULL; } /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { /* 创建socket失败 */ rt_kprintf("Socket error"); sock = RT_NULL; } /* 初始化预连接的服务端地址 */ struct hostent *host = gethostbyname("192.168.1.203"); struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(9600); server_addr.sin_addr = *((struct in_addr *)host->h_addr); rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); /* 连接到服务端 */ if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { /* 连接失败 */ rt_kprintf("Connect fail!"); closesocket(sock); /*释放接收缓冲 */ return 0; } //开启线程 dt_test_isWhile = 1; dt_test_runing = 1; rt_thread_t tid; tid = rt_thread_create("os_test", dt_WIZ_test_thread_entry, &sock, 1024, (RT_THREAD_PRIORITY_MAX / 3), 20); RT_ASSERT(tid != RT_NULL); rt_thread_startup(tid); rt_thread_mdelay(10000); closesocket(sock); } void dt_WIZ_test_thread_entry(void *parameter) { int sock = *(int*)(parameter); char *dev_data_buff = rt_calloc(1,BUFSZ); int dev_bytes_received; int ret,i=5; if (dev_data_buff == RT_NULL) { rt_kprintf("No memory"); return; } while(dt_test_isWhile) { //接收设备数据 dev_bytes_received = recv(sock, dev_data_buff, BUFSZ - 1, 0); rt_thread_mdelay(10); //等待dt_pass_through_stop关闭sock,防止多次关闭同一个sock //cmd_printf(1,dev_data_buff,dev_bytes_received); //打印发送数据 //发送设备数据到网络 if(dev_bytes_received>0) { ret = send(sock, dev_data_buff, dev_bytes_received, 0); if (ret <= 0) { /* 接收失败,关闭这个连接 */ if(sock!=RT_NULL) closesocket(sock); rt_kprintf("thr_web_sock send error %d,close the socket.",ret); } } } dt_test_isWhile = 0; } dt_test_runing = 0; rt_kprintf("quit."); } ``` ## 问题 在main线程创建线程,w5500开启堵塞接收`recv(sock, dev_data_buff, BUFSZ - 1, 0);`,main函数中延时`closesocket(sock);` 此事会出错`wiz_recvfrom`函数的`wiz_do_event_changes`中`rt_wqueue_wakeup`死掉。 ## 目的 在一个堵塞的socket中接收线程中要怎么跳出堵塞函数除了关闭socket
查看更多
hijxyz
2021-01-15
这家伙很懒,什么也没写!
不支持多线程操作的socket的
3
个回答
默认排序
按发布时间排序
kid
2021-01-19
这家伙很懒,什么也没写!
我也遇到过这个问题, 关不掉socket, 又无法通信, 改源码强行关闭, 时间久了也会出问题, 后来换了 lan8720 , 数个bug 一同消失不见了, 缺点也很明显, 片上使用的内存增加了不少
Evilin
2022-07-18
这家伙很懒,什么也没写!
`shutdown(es_ito_soket,2);` 我用的这个不知道会不会出问题
撰写答案
登录
注册新账号
关注者
0
被浏览
2.7k
关于作者
两岸青山相对出
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
1
W5500软件包开机无法解析link.rt-thread.org
2
W5500 如何实现断开重连?
3
W5500初始化全部都OK,电脑能ping板子,板子ping不通电脑
4
w5500 编译错误
5
求个SPI上挂W5500、Max6675两个设备的驱动例子
6
TFTP与W5500配合能传文件但无内容
7
wiznet(W5500) 设置MAC
8
SPI总线挂接2个W5500以太网芯片
9
多网卡建立链路问题,求官方解答
10
为什么W5500一直显示无法挂载
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部