Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to choose which Network interface to use?

I use Qt for my TCP communication. If my PC has 2 network interfaces (say eth0, eth1), and say I want to explicitly use eth1, how do I do that in Qt?

like image 762
sivabudh Avatar asked Apr 27 '10 21:04

sivabudh


2 Answers

QTcpServer::listen takes address of the interface you want to listen as the first argument.

If you have IP address 192.168.0.1 on eth0 and 10.0.0.1 on eth1 then

QTcpServer serv0;
QTcpServer serv1;

serv0.listen( QHostAddress("192.168.0.1"), 8080 );
serv1.listen( QHostAddress("10.0.0.1"), 8080 );

serv0 will listen only port 8080 on eth0 and serv1 will listen only port 8080 on eth1.

There is no way to specify which interface should QTcpSocket use since it is decided by operation system according to the kernel routing table.

You can use QNetworkInterface::allAddresses() to get list of interfaces addresses available.

like image 167
VestniK Avatar answered Sep 18 '22 10:09

VestniK


That's not a Qt question, that's a socket question. Bind() to the address on eth1. You have to hope that the routing table will actually do what you expect when you do that.

like image 22
Andrew McGregor Avatar answered Sep 18 '22 10:09

Andrew McGregor