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 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?
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.
Sie würden getsockname()
( Ссылка ) verwenden, um die IP des gebundenen Sockets zu erhalten.
Auch vorher beantwortet, hier: C - Öffentliche IP von Dateideskriptor
Tags und Links c sockets fork unix file-descriptor