Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
socket recv返回值不准确?
发布于 2019-07-23 15:46:45 浏览:1879
订阅该版
如题, 在做socket recv时候, 如果接收buf的大小 是500字节, 但是 云端 只给了 100字节, 这个时候 recv返回收到的数据却是 500。 有知道为什么的嘛, 在底层at scoket recv打印了下 确实是收到了500,但是明明云端只回了100, 经过测试 发现 接收buf的大小 ,基本就是 返回值的大小, 比如buf大小改成1000,返回的就是一千  
查看更多
8
个回答
默认排序
按发布时间排序
tyustli
2019-07-23
这家伙很懒,什么也没写!
``` content_pos = len; return content_pos; ``` 看代码程序对 len 的并没有修改,这里是直接返回的传入的 len 大小,
Cheney_Chen
2019-07-24
这家伙很懒,什么也没写!
``` static size_t at_recvpkt_get(rt_slist_t *rlist, char *mem, size_t len) { rt_slist_t *node; at_recv_pkt_t pkt; size_t content_pos = 0, page_pos = 0; if(rt_slist_isempty(rlist)) return 0; for (node = rt_slist_first(rlist); node; node = rt_slist_next(node)) { pkt = rt_slist_entry(node, struct at_recv_pkt, list); page_pos = pkt->bfsz_totle - pkt->bfsz_index; if (page_pos >= len - content_pos) { // 如果进入这个判断,则数据接收列表中数据已经超过 len 的长度,自然会返回 len 长度数据 memcpy((char *) mem + content_pos, pkt->buff + pkt->bfsz_index, len - content_pos); pkt->bfsz_index += len - content_pos; if (pkt->bfsz_index == pkt->bfsz_totle) { at_recvpkt_node_delete(rlist, node); } content_pos = len; break; } else { // 如果像你说的只接收到 100 字节数据,应该会到这个判断中,返回的 content_pos 为数据缓冲列表中数据值。 memcpy((char *) mem + content_pos, pkt->buff + pkt->bfsz_index, page_pos); content_pos += page_pos; pkt->bfsz_index += page_pos; at_recvpkt_node_delete(rlist, node); } } return content_pos; } ``` 代码执行逻辑上面注释所述,应该不会出现上述问题,建议再调试确定一下。
aichip_mac
2019-07-24
这家伙很懒,什么也没写!
>代码执行逻辑上面注释所述,应该不会出现上述问题,建议再调试确定一下。 ... --- 这是一个for循环 第一次 确实 进到了else , 但是第二次循环 到了if 里面,就是你说的接收表中数据以及超过Len的长度, 你看我那打印出来的接收长度 达到了3838382826, 这个值不太可能。这是真正困扰我的地方
aichip_mac
2019-07-24
这家伙很懒,什么也没写!
>看代码程序对 len 的并没有修改,这里是直接返回的传入的 len 大小, --- 还请参考下 我在楼下的回复
Cheney_Chen
2019-07-26
这家伙很懒,什么也没写!
>这是一个for循环 第一次 确实 进到了else , 但是第二次循环 到了if 里面,就是你说的接收表中数据以及超 ... --- 这时候把 pkt->bfsz_totle(数据总长度)和 pkt->bfsz_index(当前已使用数据)数值打印出来,确定一下 page_pos 为什么被改为 3838382826,还有两次循环获取的列表中的 pkt 对象是一样的,第一次 else 之后 pkt 对象有没有被正确的删除嘛?
aichip_mac
2019-07-26
这家伙很懒,什么也没写!
>这时候把 pkt->bfsz_totle(数据总长度)和 pkt->bfsz_index(当前已使用数据)数值打印出来,确定一下 p ... --- 原因查明修复了,是在上面函数内在调用at_recvpkt_node_delete(rlist, node);没有将node置为RT_NULL,导致其变成野指针,从而进入第二次循环。修复办法为: 1.at_recvpkt_node_delete后node置为NULL 2.rt_slist_next()里面加入卫语句,判断传入的node是否为NULL,为NULL则返回NULL
aichip_mac
2019-07-26
这家伙很懒,什么也没写!
>这时候把 pkt->bfsz_totle(数据总长度)和 pkt->bfsz_index(当前已使用数据)数值打印出来,确定一下 p ... --- 此bug同样导致了我另一个帖子的问题:[https://www.rt-thread.org/qa/thread-12202-1-1.html](https://www.rt-thread.org/qa/thread-12202-1-1.html) fix后,已解决
Cheney_Chen
2019-07-26
这家伙很懒,什么也没写!
>此bug同样导致了我另一个帖子的问题:https://www.rt-thread.org/qa/thread-12202-1-1.html > >fix后,已解 ... --- 欢迎提交 PR :lol
撰写答案
登录
注册新账号
关注者
0
被浏览
1.9k
关于作者
aichip_mac
这家伙很懒,什么也没写!
提问
11
回答
35
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
基于RT-Thread的STM32F4开发第四讲——硬件定时器更新中断(缺失补齐教程)
2
基于RT-Thread的STM32F4开发第三讲——DAC
3
Wireshark抓包EtherCAT报文
4
RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE 原理讲解
5
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
818
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部