对于非阻塞数据报套接字,比如UDP,当我在套接字上调用write()/send()时,每次调用write()/send()或read()/recv()都只能处理一个数据包。
我想知道原始套接字,就像下面这样,是不是数据报套接字?
int on = 1;
rawfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
setsockopt(IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));发布于 2013-06-17 17:22:09
这取决于您将在数据包中包含的IP报头的类型(TCP或UDP)。实际上,包含UDP报头更容易,因为内核将管理一些TCP机制。
因此,您必须在数据包中添加UDP报头,然后它将成为数据报套接字。
发布于 2013-09-09 09:50:38
当您发送数据时,TCP/IP协议栈会添加TCP/UDP报头、IP报头和以太网报头,由网卡将整个数据包发送出去。对于原始套接字,您准备好所有的报头(TCP/UDP、IP和MAC),由网卡将整个数据包发送出去。因此,它是否是数据报取决于您添加的报头是TCP还是UDP。
https://stackoverflow.com/questions/17143778
复制相似问题