小编May*_*tan的帖子

Linux:可以使用Recvmsg接收每个传入数据包的IP_TOS

可以使用recvmsg()来获取每个传入数据包的IP_TOS字段,或者只显示为特定套接字设置的IP_TOS值.如果没有,是否有人知道获得每个传入数据包的IP_TOS值的解决方案.我正在使用UDP应用程序,因此无法像应用程序一样查看应用程序层的IP_TOS字段.谢谢.

添加我到目前为止编写的代码,有助于:

struct msghdr msg; 
struct iovec iov[1];  
memset(&msg, '\0', sizeof(msg));
msg.msg_iov = iov;
msg.msg_iovlen = 1;
iov[0].iov_base = (char *) &pkt;
iov[0].iov_len = sizeof(pkt);

struct cmsghdr cmsgcmsg[1];  
msg.msg_control = cmsgcmsg;
msg.msg_controllen = sizeof(struct cmsghdr);


nRet = recvmsg(udpSocket, &msg, 0);

if (nRet > 0) {
    struct cmsghdr *cmsg;
    for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg,cmsg)) {

    if ((cmsg->cmsg_level == IPPROTO_IP) && (cmsg->cmsg_type == IP_TOS) &&
    (cmsg->cmsg_len) ){
              int tos = *(uint8_t *)CMSG_DATA(cmsg);
              int isecn =  ((tos & …
Run Code Online (Sandbox Code Playgroud)

c linux-kernel

8
推荐指数
2
解决办法
3726
查看次数

标签 统计

c ×1

linux-kernel ×1