是否可以将套接字与 NIC 队列绑定?

Is it possible to bind a socket with NIC Queue?

当我打开一个新套接字时 linux 系统会自动将其绑定到 NIC 队列。目前我有两个套接字,我想将它们绑定到两个不同的 NIC 队列。我的问题是

1)是否可以通过编程方式或使用某些 linux 命令将套接字绑定到 nic 队列。

2)如果是这样,请指导我正确的方向。

when i open a new socket linux system automatically bind it to a NIC queue.

不,不是。您可以 bind() 它到本地 IP 地址,或者系统在您连接套接字时自动为您完成,对于 TCP,或者首先从它发送,对于 UDP。

Currently i have two sockets and i want to bind them to two different NIC queues. My question is

1)Is it possible to bind sockets to nic queue programmatically or using some linux command.

是的,见上文。

2)If so please guide me in the right direction.

见上文。

对于 EJP 提到的 TCP 情况,您可以 bind() 将套接字连接到特定网络接口,方法是将其 IP 地址指定给 sockaddr_in 结构。

例如:

int sock;
struct sockaddr_in sin;

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
    perror("opening TCP listening socket");
    exit(EXIT_FAILURE);
}

memset(&sin, 0, sizeof(struct sockaddr_in));
sin.sin_family = AF_INET;
/* For this example, we bind the socket to port 10080 */
sin.sin_port = htons(10080);
/* Bind to a specific interface with IP 192.168.1.1 */
if (inet_aton("192.168.1.1", &sin.sin_addr) == 0) {
    printf("Invalid IP address");
    exit(EXIT_FAILURE);
}

if (bind(sock, (struct sockaddr *) &sin, sizeof(struct sockaddr_in))
        == -1) {
    perror("TCP bind");
    exit(EXIT_FAILURE);
}

之后您可以看到您的程序使用以下命令将套接字绑定到指定的接口: netstat -tpn