Entwickler-Ecke

Internet / Netzwerk - gethostbyaddr Timeout setzen?


Martok - Sa 16.05.09 20:27
Titel: gethostbyaddr Timeout setzen?
Hi!

Ich möchte eine reihe von IP-Adressen in Hostnamen auflösen. Dazu gibts die Winsock-Funktion GetHostByAddr und das Feld h_name der zurückgegebenen Struktur.

Wenn aber die Auflösung nicht möglich ist, vertrödelt das Ding ca 5 Sekunden und hat dann vermutlich einen Timeout.

Gibts irgend ne Möglichkeit diesen auf einen kleineren Wert zu setzen, oder alternativ eine andere Variante? Das DNS nach den IPs zu fragen funktioniert zwar, liefert aber tw. ganz andere Ergebnisse.

Wie immer schonmal Danke,
Sebastian


Martok - So 17.05.09 19:14

Keiner was?

Ich hätte da eine Idee mit einem Thread auf den dann gewartet wird... aber schön ist was anderes ;)
Außerdem müsste ich da dermaßen viel Synchronisations-Spielchen machen, dass das auch nicht grade einfach wird.


ffgorcky - Sa 23.05.09 11:36

Es wäre recht schön, wenn Du Deine bisher verwendete Anweisung hier zeigst, damit wir wissen, was genau wir verbessern sollen/dürfen.
Also ich meine zumindest, dass es auch eine Möglichkeit gibt, abzufragen, ob ein Host mit dieser IP-Adresse überhaupt existiert, was Du dann vor der Abfrage nach dem Host-Namen machen könntest.


jaenicke - Sa 23.05.09 11:55

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Es wäre recht schön, wenn Du Deine bisher verwendete Anweisung hier zeigst, damit wir wissen, was genau wir verbessern sollen/dürfen.
Hat er doch geschrieben. :nixweiss:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Dazu gibts die Winsock-Funktion GetHostByAddr und das Feld h_name der zurückgegebenen Struktur.


Zum Thema:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Ich hätte da eine Idee mit einem Thread auf den dann gewartet wird... aber schön ist was anderes ;)
Außerdem müsste ich da dermaßen viel Synchronisations-Spielchen machen, dass das auch nicht grade einfach wird.
Ich würde die Funktion WSAAsyncGetHostByAddr [http://msdn.microsoft.com/en-us/library/ms741519.aspx] empfehlen. Die gibt die Kontrolle direkt zurück und schickt dir eine Nachricht, wenn eine Antwort kommt.
So kannst du mehrere Aufrufe starten und ggf. nach einer gewissen kürzeren Zeit die Nachrichten ignorieren zum Beispiel.

Du übergibst da eine ID mit, anhand derer du dann die Antwort deiner Anfrage zuordnen kannst.


Martok - Sa 23.05.09 12:41

Hat sich eh erledigt.
Das mit der Nachricht scheitert da dran, dass ich keinen MessageLoop hab ;)

Hat sich aber eh erledigt: http://delphi-forum.de/viewtopic.php?t=92331