bind()
von INADDR_ANY
tut NICHT „eine zufällige IP erzeugen“. Es bindet den Socket an alle verfügbaren Schnittstellen .
Bei einem Server möchten Sie normalerweise an alle Schnittstellen binden - nicht nur an "localhost".
Wenn Sie Ihren Socket nur an localhost binden möchten, lautet die Syntax: my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1");
Rufen Sie dann auf bind(my_socket, (SOCKADDR *) &my_sockaddr, ...)
.
Zufällig INADDR_ANY
ist eine Konstante gleich "Null":
http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html
# define INADDR_ANY ((unsigned long int) 0x00000000)
...
# define INADDR_NONE 0xffffffff
...
# define INPORT_ANY 0
...
Wenn Sie noch nicht damit vertraut sind, empfehlen wir Ihnen, den Beej-Leitfaden zur Sockets-Programmierung zu lesen:
http://beej.us/guide/bgnet/
Da die Leute dies noch lesen, ein zusätzlicher Hinweis:
Mann (7) ip :
Wenn ein Prozess neue eingehende Pakete oder Verbindungen empfangen möchte, sollte er einen Socket mit bind (2) an eine lokale Schnittstellenadresse binden .
In diesem Fall darf nur ein IP-Socket an ein bestimmtes lokales Paar (Adresse, Port) gebunden sein. Wenn im Bindungsaufruf INADDR_ANY angegeben ist, wird der Socket an alle lokalen Schnittstellen gebunden.
Wenn listen (2) an einem ungebundenen Socket aufgerufen wird, wird der Socket automatisch an einen zufälligen freien Port gebunden, wobei die lokale Adresse auf INADDR_ANY gesetzt ist.
Wenn connect (2) an einem ungebundenen Socket aufgerufen wird, wird der Socket automatisch an einen zufälligen freien Port oder an einen verwendbaren gemeinsam genutzten Port gebunden, wobei die lokale Adresse auf INADDR_ANY gesetzt ist ...
Es gibt mehrere spezielle Adressen: INADDR_LOOPBACK (127.0.0.1) bezieht sich immer über das Loopback-Gerät auf den lokalen Host; INADDR_ANY (0.0.0.0) bedeutet eine beliebige Adresse für die Bindung ...
Ebenfalls:
bind () - Bindet einen Namen an einen Socket :
Wenn das Feld (sin_addr.s_addr) auf die Konstante INADDR_ANY gesetzt ist, wie in netinet / in.h definiert, fordert der Anrufer an, dass der Socket an alle Netzwerkschnittstellen auf dem Host gebunden wird. Anschließend werden UDP-Pakete und TCP-Verbindungen von allen Schnittstellen (die mit dem gebundenen Namen übereinstimmen) an die Anwendung weitergeleitet. Dies ist wichtig, wenn ein Server einen Dienst für mehrere Netzwerke anbietet. Wenn Sie die Adresse nicht angeben, kann der Server alle UDP-Pakete und TCP-Verbindungsanforderungen für seinen Port akzeptieren, unabhängig von der Netzwerkschnittstelle, auf der die Anforderungen eingegangen sind.
htonl(INADDR_ANY)
. Das Dokument sagt, dass diese Funktion eine zufällige IP generiert ... " Dies ist nicht korrekt. Welche Dokumente sagen es Ihnen?