4

Currently I do the following to listen on any available port on all interfaces:

// hints struct for the getaddrinfo call struct addrinfo hints, *res; memset(&hints, 0, sizeof hints); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; // Fill in addrinfo with getaddrinfo if (getaddrinfo(NULL, "0", &hints, &res) != 0) { cerr << "Couldn't getaddrinfo." << endl; exit(-1); } 

I would like to dynamically bind to only one interface, the non-loopback interface of the system.

How would I go about doing this?

3 Answers 3

5

Take a look at SO_BINDTODEVICE. Tuxology has a good description of this

Sign up to request clarification or add additional context in comments.

1 Comment

1

If you want an excellent book on the matter:

UNIX Network Programming by W. Richard Stevens, in two volumes. Volume one covers sockets.

Also Advanced Programming in the UNIX Environment, also by Stevens and updated in 3rd edition by Rago.

These are widely considered to be classics and standard references for UNIX / Linux / et al

Comments

1

You can use the SIOCGIFADDR ioctl() to determine the IP address of a specific interface, and then bind() to that address.

1 Comment

This is most common solution, though it breaks down if you have multiple interfaces with the same address or your interfaces change addresses.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.