OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4591|回复: 1

LWIP使用SOCKET超时无效,判断和服务器连接方法询问

[复制链接]

22

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2019-11-10
在线时间
61 小时
发表于 2021-7-30 17:50:40 | 显示全部楼层 |阅读模式
2金钱
硬件平台:STM32H743

软件平台:FreeRtos+lwip+Client+Socket

背景描述:
1:电脑做服务端、设备做客户端,设备开一个线程用作和服务端的交互;
2:线程创建,连接,通信没有问题,(服务器端使用网络调试助手);

目的1 : 读取数据的时候等待一下,比如等待100ms
目的2 :在不使用心跳包作为媒介,想要判断客户端和服务器的连接状态
                因为目前使用的场景是,客户端可以不给服务器发数据,有可能一天都不发一次数据。但是会有可能把网线拔掉。或者把服务器关闭的情况

网络上查找各种方法:实际测试都没有效果:如下

配置不阻塞方式,(的确是不阻塞了,read() 只要是没有数据就立马返回-1,都不知道为什么不能延时)
源码:
#define LWIP_SO_RCVTIMEO        1

//配置不阻塞方式,
flag = 1;
iResult = ioctlsocket(sock, FIONBIO, &flag);
//设置接收超时
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
ret = setsockopt(sock, SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout));
read(sock, &buff[0], sizeof(buff));


问1、:为什么在read()函数时没有等待10s再往下执行能???
问2:  如何判断客户端和服务器断开连接。

我在论坛里面找到了一份帖子,也提到了这个问题,但是没有贴出来解决办法
http://47.111.11.73/forum.php?mo ... cket%2B%B3%AC%CA%B1

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4309
金钱
4309
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-7-30 18:31:33 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 09:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表