SocketConnect Timeout
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 159
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
SocketConnect Timeout
Hallo.
Mein Kunde hat Barcodeleser die ich zyklisch über Socket abfrage. Jeder Leser hat seine eigene IP.
Verkürzt gesagt: Socket connect - Verbindung steht - schicke Anfrage - erhalte Antwort - Socket schließen.
Ca. alle 3 sec wird der Leser abgefragt. Funktioniert seit ca. 1,5 Jahren problemlos.
Nun kam der Kunde auf die Idee das ich eine Meldung schicken soll, sobald ein Leser nicht erreichbar ist. Ich zähle die Fehlversuche und wenn 4 Fehlversuche hintereinander erreicht sind, dann kommt die Meldung: Leser nicht erreicht.
Auch das geht, aber es dauert bis zu 3 min. bis diese Meldung kommt, d. h. der Socketconnect hängt ca. 30 sec wenn der Teilnehmer nicht erreichbar ist.
Gibt es eine Möglichkeit diese Zeit zu verkürzen (5 sec) oder gibt es eine andere Möglichkeit zu erkennen ob die IP-Adresse erreicht werden kann.
So eine Art Ping.
Ich verwende aktuell 1.9.1 könnte beim Kunden aber auch auf 2.0 upgraden.
Wenn ich das auf meinem PC mit z. B. Hercules (Terminalprogramm) test, dann kommt die Meldung viel schneller.
Alle Rechner laufen unter WIN10.
Kunde hat einen guten Administrator, das Netz läuft zuverlässig und stabil.
Bin für jeden Rat dankbar.
Gruß
Bernd Reinhardt
Mein Kunde hat Barcodeleser die ich zyklisch über Socket abfrage. Jeder Leser hat seine eigene IP.
Verkürzt gesagt: Socket connect - Verbindung steht - schicke Anfrage - erhalte Antwort - Socket schließen.
Ca. alle 3 sec wird der Leser abgefragt. Funktioniert seit ca. 1,5 Jahren problemlos.
Nun kam der Kunde auf die Idee das ich eine Meldung schicken soll, sobald ein Leser nicht erreichbar ist. Ich zähle die Fehlversuche und wenn 4 Fehlversuche hintereinander erreicht sind, dann kommt die Meldung: Leser nicht erreicht.
Auch das geht, aber es dauert bis zu 3 min. bis diese Meldung kommt, d. h. der Socketconnect hängt ca. 30 sec wenn der Teilnehmer nicht erreichbar ist.
Gibt es eine Möglichkeit diese Zeit zu verkürzen (5 sec) oder gibt es eine andere Möglichkeit zu erkennen ob die IP-Adresse erreicht werden kann.
So eine Art Ping.
Ich verwende aktuell 1.9.1 könnte beim Kunden aber auch auf 2.0 upgraden.
Wenn ich das auf meinem PC mit z. B. Hercules (Terminalprogramm) test, dann kommt die Meldung viel schneller.
Alle Rechner laufen unter WIN10.
Kunde hat einen guten Administrator, das Netz läuft zuverlässig und stabil.
Bin für jeden Rat dankbar.
Gruß
Bernd Reinhardt
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2112
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 66 Mal
Re: SocketConnect Timeout
Servus Bernd,
SocketSetBlockingMode auf .f. setzen, dann hast es selber in der Hand.
SocketSetBlockingMode auf .f. setzen, dann hast es selber in der Hand.
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
-
- Rekursionen-Architekt
- Beiträge: 159
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
Re: SocketConnect Timeout
Hallo Werner
Danke für die rasche Antwort.
Ich setzte SocketBlockingMode nachem ich die Verbindung aufgebaut hat.
Mit geht es hier um den Verbindungsaufbau.
Mit SocketNew erzeuge ich den neuen Socket. Das geht quasi immer.
Mit SocketConncet verbinde ich mich mit dem externen Barcodeleser über die IP-Adresse und den Port.
Das geht alles auch sehr schnell und zuverlässig wenn der Barcodeleser im Netzwerk ist.
Wenn aber der Teilnehmer (IP) nicht im Netzwerk ist, dann dauert das SocketConnect sehr lange.
Beeinflusst der BlockingMode auch die Zeit von dem Verbindungsaufbau oder steuert das nur das "Warten auf Daten" wenn die Verbindung bereits steht?
Ich möchte halt sehr schnell erkennen ob der Barcodeleser noch im Netzwerk ist.
Gruß
Bernd
Danke für die rasche Antwort.
Ich setzte SocketBlockingMode nachem ich die Verbindung aufgebaut hat.
Mit geht es hier um den Verbindungsaufbau.
Mit SocketNew erzeuge ich den neuen Socket. Das geht quasi immer.
Mit SocketConncet verbinde ich mich mit dem externen Barcodeleser über die IP-Adresse und den Port.
Das geht alles auch sehr schnell und zuverlässig wenn der Barcodeleser im Netzwerk ist.
Wenn aber der Teilnehmer (IP) nicht im Netzwerk ist, dann dauert das SocketConnect sehr lange.
Beeinflusst der BlockingMode auch die Zeit von dem Verbindungsaufbau oder steuert das nur das "Warten auf Daten" wenn die Verbindung bereits steht?
Ich möchte halt sehr schnell erkennen ob der Barcodeleser noch im Netzwerk ist.
Gruß
Bernd
Code: Alles auswählen
nVersuche := 0
do while nVersuche++ < 2
nError := 0
nSocket = SocketNew( , SOCK_STREAM, , @nError)
cAusgabe := "Socketnew Ausgabe Errcode-" + alltrim(str(nError)) + " Socket- " + alltrim(str(nSocket)) + CRLF + cAusgabe
if nError = 0
lSuccess = SocketConnect(nSocket, , cIP, nPort, @nError)
if nError <> 0
lSuccess := socketShutDown(nSocket, SD_BOTH, @nError)
if lSuccess
endif
Socketclose(nSocket)
nSocket := -1
cAusgabe := "ERROR: SocketConnect failed IP-" + cIP + CRLF + cAusgabe
sleep(10)
else
cAusgabe := "SocketConnect Errorcode-" + alltrim(str(nError)) + " Port-" + alltrim(str(nPort,6)) + " IP-" + cIP + CRLF + cAusgabe
lWeiter := .T.
exit
endif
else
cAusgabe := "ERROR: Socket failed IP-" + cIP + CRLF + cAusgabe
endif
enddo
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de
- Jan
- Marvin
- Beiträge: 14609
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 84 Mal
- Kontaktdaten:
Re: SocketConnect Timeout
Hallo Bernd,
ich hab mal für eine Kunden ein Progrämmchen geschrieben, das eine Liste vorgegebener IP abarbeitet. Schlicht um festzustellen ob die noch anpingbar sind oder nicht. Wäre das vielleicht ein Lösungsansatz für Dich? Das geht ziemlich flott, nie mehr als 1 Sekunde je IP.
Jan
ich hab mal für eine Kunden ein Progrämmchen geschrieben, das eine Liste vorgegebener IP abarbeitet. Schlicht um festzustellen ob die noch anpingbar sind oder nicht. Wäre das vielleicht ein Lösungsansatz für Dich? Das geht ziemlich flott, nie mehr als 1 Sekunde je IP.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2919
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: SocketConnect Timeout
Gibt es nicht Werte für SendTimeout und ReceiveTimeout zu setzen wie bei xb2.net ?
Viele Grüße
Wolfgang
Wolfgang
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2112
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 66 Mal
Re: SocketConnect Timeout
Servus Bernd,
nein, SocketSetBlockingMode wirkt erst für den Datentransfer, nicht für den Verbindungsaufbau. Habs gerade getestet, ein SocketConnect mit einem falschen Port dauert bei mir ca. 20 Sekunden, bis ich den Timeout bekomme. Obs da eine Einstellung dafür gibt, weiß ich nicht. In der Hilfe steht nichts darüber. Musst mal bei Alaska nachfragen.
Aber evtl. hilft Dir SocketSelect nach dem Connect?
nein, SocketSetBlockingMode wirkt erst für den Datentransfer, nicht für den Verbindungsaufbau. Habs gerade getestet, ein SocketConnect mit einem falschen Port dauert bei mir ca. 20 Sekunden, bis ich den Timeout bekomme. Obs da eine Einstellung dafür gibt, weiß ich nicht. In der Hilfe steht nichts darüber. Musst mal bei Alaska nachfragen.
Aber evtl. hilft Dir SocketSelect nach dem Connect?
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Marcus Herz
- 1000 working lines a day
- Beiträge: 805
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 37 Mal
- Danksagung erhalten: 177 Mal
- Kontaktdaten:
Re: SocketConnect Timeout
Ich denke, timeout, das sind einstellungen aus system-netzwerk von windows. Da hat alaska keinen Einfluss
Gruß Marcus
Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Erkenne, was du findest, dann weißt du, wonach du gesucht hast
-
- Rekursionen-Architekt
- Beiträge: 159
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
Re: SocketConnect Timeout
Hallo Jan
Aufgrund etwas anderer Probleme wurde der Timeout etwas nach hinten gestellt. Allerdings sind in den letzten Tagen bei dem Kunden wieder Kartenleser ausgefallen und das Programm hängt dann erst mal sehr lange.
So ein Tool, welches die IP-Adresse vor dem Aufbau prüft wäre für diesen Fall sicherlich eine gute Lösung.
Wie ist da der Lösungsansatz?
Bin für jeden Hinweis dankbar.
Gruß
Bernd
Aufgrund etwas anderer Probleme wurde der Timeout etwas nach hinten gestellt. Allerdings sind in den letzten Tagen bei dem Kunden wieder Kartenleser ausgefallen und das Programm hängt dann erst mal sehr lange.
So ein Tool, welches die IP-Adresse vor dem Aufbau prüft wäre für diesen Fall sicherlich eine gute Lösung.
Wie ist da der Lösungsansatz?
Bin für jeden Hinweis dankbar.
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de
- Jan
- Marvin
- Beiträge: 14609
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 84 Mal
- Kontaktdaten:
Re: SocketConnect Timeout
Hallo Bernd,
da gab es mal einen alten Thread unter https://www.xbaseforum.de/viewtopic.php ... nt#p129271, wo es darum ging. Hier noch mal der Code, der dabei heraus gekommen war:
Müsste man wohl mal auf EXTERN umschrieben, um aktuell zu bleiben. Aber klappt auch so ohne Probleme.
Jan
da gab es mal einen alten Thread unter https://www.xbaseforum.de/viewtopic.php ... nt#p129271, wo es darum ging. Hier noch mal der Code, der dabei heraus gekommen war:
Code: Alles auswählen
*****************************************************************************************************************************************************
/// <summary>
/// <para>
/// <bold>Zweck:</bold> Ein Ping senden
/// </para>
/// <para>
/// <bold>Parameter:</bold> IP-Adresse (geht nicht auf URL, nur IP)
/// </para>
/// </summary>
/// <returns>
/// NIL
/// </returns>
///
FUNCTION myPing(cHost)
LOCAL nDst := 0
LOCAL nHop := 0
LOCAL nRTT := 0
LOCAL nReturn := 0
nDst := inet_addr(cHost) && google.com
nReturn := GetRTTAndHopCount(nDst, @nHop, 50, @nRTT)
IF nReturn <> 0 // Bei <> 0 war der Ping erfolgreich
RETURN .T.
ELSE
RETURN .F.
ENDIF
RETURN .F.
DLLFunction GetRTTAndHopCount(DestIpAddress, @HopCount, MaxHops, @RTT) USING STDCALL FROM IPHLPAPI.DLL
DLLFUNCTION inet_addr(cIP) USING STDCALL FROM wsock32.DLL
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2112
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 66 Mal
Re: SocketConnect Timeout
Umsetzung auf 2.0 und EXTERN:
https://www.xbaseforum.de/viewtopic.php ... 48#p143048
==> 1 Zeile:
https://www.xbaseforum.de/viewtopic.php ... 48#p143048
IF nReturn <> 0 // Bei <> 0 war der Ping erfolgreich
RETURN .T.
ELSE
RETURN .F.
ENDIF
RETURN .F.

==> 1 Zeile:
Code: Alles auswählen
return .not. nReturn == 0
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Jan
- Marvin
- Beiträge: 14609
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 84 Mal
- Kontaktdaten:
Re: SocketConnect Timeout
Hallo Werner,
ich mache bei Ziffern niemals einen Exakt Gleich Vergleich. Das ght zu oft schief wegen der systembedingten Rundungsfehler.
Jan
ich mache bei Ziffern niemals einen Exakt Gleich Vergleich. Das ght zu oft schief wegen der systembedingten Rundungsfehler.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2112
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 66 Mal
Re: SocketConnect Timeout
Servus Jan,
erstens gings mir darum, aus 6 (teils unsinnigen) Zeilen Code eine Zeile zu machen und zweitens: Der Rückgabewert kommt von einer Windows-DLL mit dem Rückgabewert Bool - also 0 oder 1. Da wird nichts gerundet.
erstens gings mir darum, aus 6 (teils unsinnigen) Zeilen Code eine Zeile zu machen und zweitens: Der Rückgabewert kommt von einer Windows-DLL mit dem Rückgabewert Bool - also 0 oder 1. Da wird nichts gerundet.
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>