1)是否可以通过编程方式或使用某些linux命令将套接字绑定到nic队列。
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