首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原始套接字是否为数据报套接字?

原始套接字是否为数据报套接字?
EN

Stack Overflow用户
提问于 2013-06-17 16:55:48
回答 2查看 1.6K关注 0票数 5

对于非阻塞数据报套接字,比如UDP,当我在套接字上调用write()/send()时,每次调用write()/send()或read()/recv()都只能处理一个数据包。

我想知道原始套接字,就像下面这样,是不是数据报套接字?

代码语言:javascript
复制
int on = 1;
rawfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
setsockopt(IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-17 17:22:09

这取决于您将在数据包中包含的IP报头的类型(TCP或UDP)。实际上,包含UDP报头更容易,因为内核将管理一些TCP机制。

因此,您必须在数据包中添加UDP报头,然后它将成为数据报套接字。

票数 2
EN

Stack Overflow用户

发布于 2013-09-09 09:50:38

当您发送数据时,TCP/IP协议栈会添加TCP/UDP报头、IP报头和以太网报头,由网卡将整个数据包发送出去。对于原始套接字,您准备好所有的报头(TCP/UDP、IP和MAC),由网卡将整个数据包发送出去。因此,它是否是数据报取决于您添加的报头是TCP还是UDP。

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

https://stackoverflow.com/questions/17143778

复制
相关文章

相似问题

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