我正在从这样初始化的套接字中读取字节:
fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
但是,当我从这个套接字读取
char buf[ETH_FRAME_LEN]
len = read(fd, buf, sizeof(buf));
len 显示只读取了 1500 个字节。我检查了wireshark,返回的数据包是5854。IP下的总长度字段为5840(所以+ 14字节的以太网头= 5854)。我尝试使用更大的缓冲区(6000),但仍然只有 1500 个字节被从线路中读取。
我尝试从服务器请求一个较小的文件(1504 字节),但我得到了相同的结果。由于它是一个原始套接字,因此读入的数据包括以太网标头,因此它不会将最后 4 个字节读入缓冲区。
这可能是什么原因?我不知道有任何论据socket()
可能导致这种情况。