C-Socket erhält die IP-Adresse aus dem Dateideskriptor, die von accept zurückgegeben wurde

8

Ich weiß, dass diese Frage typisch scheint und mehrmals beantwortet wurde, aber ich denke, wenn Sie die Details lesen, ist das nicht so häufig (ich habe es nicht gefunden).

Der Punkt ist, dass ich einen Unix-Dienst in c entwickle, der einen Socket öffnet und auf Verbindungen wartet. Wenn ich eine Verbindung habe, erzeuge ich einen neuen Prozess. >, sodass mehrere Verbindungen gleichzeitig geöffnet werden können .

%Vor%

Später ( nach und innerhalb einiger anderer Methoden und Code) der Kindprozess speichern Sie die Verbindungsinformationen auf der BBDD und ich brauche auch genau Moment , um die IP-Adresse zu erhalten , die die zu behandelnde Verbindung geöffnet hat.

Da mehrere Verbindungen gleichzeitig bestehen können und die Variable struct sockaddr_in clientaddr , die ich an die Methode accept übergebe, wird für den gesamten Prozess Ich bin mir nicht sicher, ob es später eine gute Idee ist, die IP-Adressinformationen von diesem Weg zu bekommen, weil dann ich die IP-Adresse von einer anderen Verbindung öffnen konnte .

Ich würde gerne auf die IP-Adresse von dem Dateideskriptor int newfd zugreifen können, das ich von der accept-Methode (die zurückgegebene Ganzzahl) erhalte. Ist es möglich? Oder habe ich die Dateideskriptorfunktion missverstanden?

    
Aleix 09.12.2013, 13:40
quelle

2 Antworten

12

Ok. Dank @alk und @rileyberton habe ich die richtige Methode gefunden, die getpeername :

%Vor%

Nun kann ich in einem anderen Prozess die IP-Adresse (in der "Zeichenfolge" clientip ) des Clients erhalten, der die Verbindung nur mit dem Dateideskriptor newfd erstellt hat, das mit der Methode accept erhalten wurde.

    
Aleix 09.12.2013, 16:17
quelle
3

Sie würden getsockname() ( Ссылка ) verwenden, um die IP des gebundenen Sockets zu erhalten.

>

Auch vorher beantwortet, hier: C - Öffentliche IP von Dateideskriptor

    
rileyberton 09.12.2013 13:44
quelle

Tags und Links