socket套接字网卡绑定和优先级调整

本文深入探讨了如何使用setsockopt函数设置SO_BINDTODEVICE和SO_PRIORITY两个关键的socket选项,展示了具体的C语言代码实现,包括如何绑定特定的网络接口以及如何设定套接字的优先级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SO_BINDTODEVICE  套接字网络接口绑定选项

SO_PRIORITY      套接字优先级选项

通过调用setsocketopt函数来设置一系列socket选项

/**
*SO_BINDTODEVICE  套接字网络接口绑定选项
*SO_PRIORITY      套接字优先级选项
*/

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/ioctl.h> /*ioctl命令*/
#include<netinet/if_ether.h> /*ethhdr结构*/
#include<net/if.h> /*ifreq结构*/
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
#include<netinet/in.h> /*in_addr结构*/
#include<netinet/ip.h> /*iphdr结构*/
#include<netinet/udp.h> /*udphdr结构*/
#include<netinet/tcp.h> /*tcphdr结构*/

int main(int argc, char *argv[]){
    int err;
    int s = socket(AF_INET , SOCK_STREAM , 0);
    char ifname[] = "eno1"; /*绑定网卡名称*/
    struct ifreq if_etho1;  /*绑定网卡结构*/
    strncpy(if_etho1.ifr_name , ifname , IFNAMSIZ); /*将网卡名称放到结构成员ifr_name中*/
    err = setsockopt(s , SOL_SOCKET , SO_BINDTODEVICE , (char*)&if_etho1 , sizeof(if_etho1)); /*将s绑定到网卡etho1上*/
    if(err){//失败
        printf("setsockopt SO_BINDTODEVCIE failure \n");
    }else{ //成功
        printf("setsockopt SO_BINDTODEVCIE success \n");
    }
    int opt = 6; /*优先级 0 ~ 6 :6 最高,优先处理*/
    err = setsockopt(s , SOL_SOCKET , SO_PRIORITY , &opt , sizeof(opt));/*设置s的优先级*/
    if(err){//失败
        printf("setsockopt SO_PRIORITY failure \n");
    }else{ //成功
        printf("setsockopt SO_PRIORITY success \n");
    }

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值