PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++ Socket auf bestimmte eth-Schnittstelle binden



7.e.Q
14-06-2006, 13:01
Hi Leute,

ich kann ja mit bind() und dem s_addr = INADDR_ANY; Wert in der sockaddr_in Struktur einen Socket an alle oder auch mit inet_addr() auf eine bestimmte IP Adresse binden.

Da diese IP bei uns aber unterschiedlich sein kann, wir die anderen Devices anderwaltig benötigen und ich keine Lust habe, beim Binden des Sockets die IP von eth0 jedes Mal abfragen zu müssen, würde ich gern wissen, wie man den Socket auf ein bestimmtes Interface binden kann, unabhängig davon, ob überhaupt und wenn ja, welche IP darauf liegt.

edit: Achso, was noch wichtig wäre... Ich muss teilweise Sockets auf mehr als ein Interface binden. Aber eben nicht auf alle. Also beispielsweise auf loopback und eth0, nicht aber auf eth1, eth2... Ist sowas überhaupt möglich? Wenn ja, wie?


Danke

Gruß, Hendrik

Beatkiller
14-06-2006, 13:36
http://www.mrunix.de/forums/archive/index.php/t-29008.html

7.e.Q
14-06-2006, 13:50
Ist ja wieder über die IP... okay, wenn's nur so geht...

Und wie ist das mit mehreren (nicht alle) Interfaces? Brauch ich dann für jedes Interface, auf dem ich den Dienst zur Verfügung stellen will, einen eigenen Socket???

RHBaum
14-06-2006, 14:38
Die IP iss nun mal der identifier zum zugriff auf nen Netzwerk interface, im rahmen des TCP/IP Stacks.

Trotzdem koennen einige programme mit alias, bzw den Interface Namen umgehen .... (siehe iptables)

deshalb meine vorschlaege (in der reihenfolge), falls das vor Dir keiner schon mal geloest hat.

- ueberleg nochmal gruendlich, ob du ne Identification uebers Interface brauchst. Eigentlich iss das implementierungsdetail deines BS.
- Schau ob du im Posix/SystemV standard was hilfreiches findest, um die InterfaceNamen aufzuloesen.
- besorg dir die quellen von nem programm was mit interface namen umgehen kann und schau wie die es umgesetz haben (iptables zum bsp)

Ciao ...

anda_skoa
16-06-2006, 15:43
Ist ja wieder über die IP... okay, wenn's nur so geht...

Nur die IP ist eindeutig, ein Networkdevice kann mehrere IPs haben



Und wie ist das mit mehreren (nicht alle) Interfaces? Brauch ich dann für jedes Interface, auf dem ich den Dienst zur Verfügung stellen will, einen eigenen Socket???

Ich glaube ja, nur der Spezialfall "Alle Interfaces" ist extra lösbar (mit 0.0.0.0)

Ciao,
_