首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确接收MSG_FLAGS?

如何正确接收MSG_FLAGS?
EN

Stack Overflow用户
提问于 2020-11-30 12:48:45
回答 1查看 113关注 0票数 0

在发送消息后,我正在等待MSG_CONFIRM。如何正确接收MSG_FLAGS?我不明白为什么temp总是相等的-1

代码语言:javascript
复制
struct msghdr msg;
struct sockaddr_can addr;
struct can_frame frame;
struct ifreq ifr

代码语言:javascript
复制
setsockopt(s, SOL_CAN_RAW, CAN_RAW_ERR_FILTER, &(int){ 1 }, sizeof(int));
setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK, &(int){ 1 }, sizeof(int));
setsockopt(s, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS, &(int){ 1 }, sizeof(int));

strcpy(ifr.ifr_name, ifname);
ioctl(s, SIOCGIFINDEX, &ifr);

addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;

write(s, &frame, sizeof(struct can_frame));

temp = recvmsg(s, &msg, MSG_CONFIRM);

printf("%02X \n", temp);
printf("%02X \n", errno);

if (msg.msg_flags==MSG_CONFIRM){
   printf("MSG_CONFIRM"); }
EN

回答 1

Stack Overflow用户

发布于 2020-11-30 16:06:25

如果CAN帧是发送确认文件,则MSG_CONFIRMrecvmsg()msg.msg_flags中设置,但不能将标志传递给recvmsg()

不幸的是,这使得处理发送确认有点复杂。在write()之后,您可以首先从其他节点接收CAN帧,您必须处理或缓冲这些节点,然后才能接收到与write()相对应的MSG_CONFIRM帧。您不能使用recvmsg()来等待确认,并将其他帧保存在内核缓冲区中,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65073910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档