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

use*_*267 5 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));
Run Code Online (Sandbox Code Playgroud)

nou*_*ney 2

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

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