是原始套接字数据报套接字?

时间:2013-06-17 08:55:48

标签: sockets network-programming raw-sockets

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

我想知道原始套接字(如下所示)是否是数据报套接字?

int on = 1;
rawfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
setsockopt(IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

当您发送数据时,TCP / IP堆栈将添加TCP / UDP标头,IP标头,然后是以太网标头,并且网络工作卡将整个数据包传输出去。对于原始套接字,您准备所有标头(TCP / UDP,IP和MAC),并且网络工作卡将整个数据包传输出去。因此,它是否是数据报取决于您添加的标头是TCP还是UDP。

相关问题