gethostbyname timeout verstellen
-
Hi allezusammen...
Ich versuche grad nen kleines Messagetool fuers Lan zu schreiben und prüfe dabei ueber gethostbyname und gethostbyaddr ob der Zielrechener ueberhaupt existiert...klappt auch alles ganz gt nur hab ich das Problem das der Time out bei den Funktionen ziemlich lang ist... will heissen wenn der Rechner nicht gefunden wird dauert es ca. 10 sek. bis mal die Meldung kommt....gibt es irgenteine Moeglichkeit diesen Timeout kleiner zu stellen ???
Gleiches wuerde mich auch fuer den timeout bei connect() der CasncSocket Klasse intressieren...
Waere echt genial wenn da jemand ne loesung fuer mich haette....Danke im vorraus....Tschuuuueeeesssss....Lord Helmchen
-
Probiers doch mal mit:
WSAAsyncGetHostByName
-
Hi ReneG
Hab ich auchschon drann gedacht, aber wenn ich die Msdn richtig verstehe blockiert mir die Funktion zwar nicht den rest meines Programms aber die Antworten kommen auch erst wenn die Funktion beendet ist..d.h. wenn der (wahrscheinlich genausolange) Timeout abgelaufen ist kommt die Meldung und vorher wundert sich der User warum nix passiert
Das beste waere wirklich ne moeglichkeit den Timeout auf 1 sec zu stellen...wenn der Rechner da ist hat er bis dahin locker ne Antwort, wenn nicht isser nicht da....bye Lord Helmchen
-
Dann hast Du wohl folgenden Abschnitt überlesen:
If no error occurs, WSAAsyncGetHostByName returns a nonzero value of type HANDLE that is the asynchronous task handle (not to be confused with a Windows HTASK) for the request. This value can be used in two ways. It can be used to cancel the operation using WSACancelAsyncRequest, ...
Damit kannst Du dann Deinen TimeOut selber bestimmen!
-
Hi...
Damit kannst Du dann Deinen TimeOut selber bestimmen!
Mhh... koenntest du mir da evtl. nen kleines Codebeispiel schreiben ???So fit bin ich mit dem ganzen Handlekrams noch nicht....ich moechte damit z.b. alle Rechner in meinem Lan durchtesten...dazu hole ich mir erst mit gethostname meinen eigenen namen, wandle den ueber gethostbyname in ne Ip um, hacke davon den letzten teil ab und ersetze ihn durch nen zaehler von 1-254.. bloss wenn nur 2 rechner an sind dauert das ganze ca. 20 Minuten... intressant waere wenn das mit der Async Funktion schneller gehen wuerde... danke fuer deine Hilfe schonmal...:)
Bye Lord Helmchen
-
Kleiner Nachtrag....fuer die hochzaehlerrei der Ip benutzte ich natuerlich die Funktion gethostbyaddr und nicht gethostbyname....aber davon gibs ja auch ne async version
-
Probiers doch mal damit: http://www.codeproject.com/internet/ipaddress.asp
-
Hi...
if ( NetResource->dwUsage ==
RESOURCEUSAGE_CONTAINER &&
NetResource->dwType ==
RESOURCETYPE_ANY )
{In diese Bedingung kommt er nie rein sondern springt immer gleich dahinter.. da ich aber keinen Plan hab was da verglichen wird weiss ich nicht was falsch laeuft...
Fehlermeldungen gibt es keine...allerdings durfte ich die winsock2.h nicht einbinden sonst hatte er mir 64 Neudefinitionsfehler gebracht (wahrscheinlich weil ich die Socketincludes schon standartmaessig drinn hab)
Bye Lord Helmchen
-
Laut MSDN hat die codeproject-Funktion auch einen Fehler:
Und zwar wird mit dem Scope RESOURCE_CONTEXT festgelegt, dass die aktuelle Arbeitsgruppe enumeriert werden soll. In diesem Context gibt es erstens gar keine Container, sondern nur Connectable Resources, und zweitens darf man dwUsage nur abrufen, wenn der Scopy auf RESOURCE_GLOBALNET steht.
Das bedeutet, dass bei Dir dwUsage schon auf RESOURCEUSAGE_CONNECTABLE stehen dürfte, womit ein Rechner in der Arbeitsgruppe gemeint ist.
-
Nachtrag:
Am günstigsten ist wohl, Du gibst beim Scope gleich RESOURCE_CONNECTED an. Dann kannst Du die bei Dir nicht gültige Abfrage entfernen.
-
Hi.
Mhh...tut sich trotzdem nix. aber is egal... nich sooo wichtig.. habs jetzt anders geloest....danke trotzdem...
Bye Helmchen