是否可以使用NIC Queue绑定套接字?

时间:2015-01-16 08:53:19

标签: linux sockets tcp nic

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

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

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

2 个答案:

答案 0 :(得分:1)

  

当我打开一个新的套接字时,linux系统自动将其绑定到一个NIC队列。

不,不。您bind()将其{{1}}添加到本地IP地址,或者系统在您连接套接字时自动为您执行此操作(如果是TCP,或者在UDP的情况下首先从它发送)。

  

目前我有两个套接字,我想将它们绑定到两个不同的NIC队列。我的问题是

     

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

是的,见上文。

  

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

见上文。

答案 1 :(得分:0)

对于提到的TCP作为EJP的情况,您可以通过为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