SocketConnect Timeout

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 147
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

SocketConnect Timeout

Beitrag von Bernd Reinhardt »

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
Bernd Reinhardt
fa.reinhardt@gmx.de
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1969
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 14 Mal
Danksagung erhalten: 31 Mal

Re: SocketConnect Timeout

Beitrag von Werner_Bayern »

Servus Bernd,

SocketSetBlockingMode auf .f. setzen, dann hast es selber in der Hand.
es grüßt

Werner

<when the music is over, turn off the lights!>
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 147
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Re: SocketConnect Timeout

Beitrag von Bernd Reinhardt »

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

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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14280
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 11 Mal
Danksagung erhalten: 37 Mal
Kontaktdaten:

Re: SocketConnect Timeout

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2810
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 6 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: SocketConnect Timeout

Beitrag von Wolfgang Ciriack »

Gibt es nicht Werte für SendTimeout und ReceiveTimeout zu setzen wie bei xb2.net ?
Viele Grüße
Wolfgang
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1969
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 14 Mal
Danksagung erhalten: 31 Mal

Re: SocketConnect Timeout

Beitrag von Werner_Bayern »

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?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 530
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 19 Mal
Danksagung erhalten: 89 Mal
Kontaktdaten:

Re: SocketConnect Timeout

Beitrag von Marcus Herz »

Ich denke, timeout, das sind einstellungen aus system-netzwerk von windows. Da hat alaska keinen Einfluss
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Antworten