首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用recvfrom获取数据

使用recvfrom获取数据
EN

Stack Overflow用户
提问于 2019-07-21 01:17:22
回答 1查看 155关注 0票数 0

我想用recvfrom()从套接字中检索数据

recvfrom()允许获取包含IP报头、TCP头和数据的缓冲区。

有没有直接指向数据的快速函数?为了读取数据,我们是否应该将数据转换为主机(网络到主机)?

我不想使用read(),因为read()不提供ip报头和TCP头

我认为应该是这样的:

代码语言:javascript
复制
recvfrom(sock, packet, sizeof(buf) - 1, 0, NULL, NULL);
iph = (struct iphdr*)packet;
iphlen = iph->ihl* 4;
tcph = (struct tcphdr*)(packet + iphlen);
tcphlen = tcph->doff * 4;

data = packet + iphlen + tcphlen;

但我不知道是否必须将数据转换为主机(网络到主机)?

EN

回答 1

Stack Overflow用户

发布于 2019-07-21 01:44:50

假设使用SOCK_RAW套接字。

IP头长度位于IP头的第一个字节的低位4位,计算32位整数。

TCP报头长度位于TCP报头的第13个字节的前4位,计算32位整数。

根据/usr/include/netinet/ip.h/usr/include/netinet/tcp.hiph->ihltcph->doff位字段已经考虑字符顺序,并且因为它们小于一个字节长(4位),所以它们不受任何进一步的hton/ntoh转换的影响。

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

https://stackoverflow.com/questions/57126971

复制
相关文章

相似问题

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