TCP_Server Error 8001

Exedra

Level-1
Beiträge
10
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Forum,

ich habe folgendes Problem:
Auf einer 750-880 habe ich eine Art Telnetserver implementiert. Einerseits ist das zum konfigurieren des Systems da, auf der anderen Seite werden von einem Service bei uns in der Firma über das Terminal regelmäßig die auf der SD-Karte geloggten Daten abgeholt.
Entweder ich hab mich da grob vertan, oder es ist so, jedenfalls dauert das abholen recht lange. Da werden die daten erstmal ausgelesen, dann nach zeitstempel gefiltert, dann nach abgefragten Datenpunkten und letztendlich in einer halbwegs lesbaren Form über die TCP-Verbindung ausgegeben.

Grundsätzlich funktioniert das sehr gut. Dadurch, dass nun Daten seit letztem Jahr abgefragt werden und jeder Datensatz so seine Zeit braucht, ist der Service nun dauerhaft online und Fragt daten ab. Das geht auch für einige Stunden gut. Hin und wieder sind da Verbindungsabbrüche (die Systeme sind fast ausschließlich per funk angebunden), aber nach einem reconnect geht es wie gewünscht weiter.

Bis es ebend nicht mehr weitergeht. Der TCP-SERVER block gibt mir dann den Fehler 8001 aus. Das bedeutet 'No socket descriptor available'

Aber was bedeutet das denn nun genau? Was kann ich dagegen tun? Ich kann natürlich per überwachung auf den Fehlercode das enable-bit kurzzeitig auf FALSE setzen um den block zu reinitialisieren, damit die Kommunikation wieder aufgebaut werden kann (schon per force versucht). Aber ich habe das Gefühl damit eher an den Symptomen als dem eigentlichen Problem rumzudoktern...

TL;DR:
TCP-Server gibt nach mehreren erfolgreichen Verbindungen Fehlercode 8001 aus (No socket descriptor available). In welcher Richtung lohnt es sich die Fehlersuche zu beginnen?


schoneinmal Danke und ein Schönes Wochenende
 
Moin,
ohne die Art Deiner Implementierung zu kennen ist eine Aussage schwer möglich, aber das Problem ist sicherlich die lange Zeit, die der Socket geöffnet ist. Vlt. findest Du einen Weg, die Verbindung zyklisch neu aufzubauen. Alternativ müsstest Du sicherlich eine Ebene weiter runter und mit der SysLibSocket den Server selbst bauen. Dann könntest Du es z.B. mit längere Timeoutzeiten versuchen.
Anm.: Der PFC200 kostet nur unwesentlich mehr und hat die SSH-Verbindung schon aus der Firmware heraus.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin und danke für die Antwort

Ich habe mir gerade mal die Logs vom abfragen angeschaut: Der Disco passiert grundsätzlichalle 4 Stunden, ich denke das wird von dem abfragenden Service so gemacht, kann ich aber gerade nicht verifizieren.
Da die online Zeiten vor dem 'Abbruch' jeweils diese maximalen 4h betragen und da vorher durchaus mehrere von diesen 4h-durchläufen erfolgreich waren, kann ich irgendwie nicht glauben, dass es die dauer ansich ist.

Witziger nebeneffekt, den ich gerade bemerkt habe: Von diesem telnet-terminal-ungetüm laufen 2 instanzen. Eine für die automatishce abfrage, eine falls man manuell auf das System möchte. Beide verwenden natürlich unterschiedliche Ports. Aber: auch die instanz für den Manuellen gebrauch zeigt das gleiche Verhalten auf. Fehler 8001, und das obwohl hier, zumindest bei dem System, mit dem ich's gerade teste, definitiv keinerlei Verbindung aufgebaut worden ist...

PFC200 (so'n 8202 oder so) würde mir zwar grundsätzlich gefallen, allerdings: Die SSH-verbindung schickt mich ja afaik nur auf die linux-console da, sprich die gesammte funktionalität müsste dann durch... ka... shellscripte oder so abgebildet werden? Und ich glaub ich kann meinem Chef auch nicht vermitteln, dass in ca. 100 Systemen der Controller getauscht werden soll.

Da sag ich der Statemachine für die Verbindungsüberwachung doch lieber, dass der Fehler automatisch resettet wird :p
 
Hi Exedra,

Wie hast Du das Problem gelöst? Ich habe das gleiche Problem, aber nur wenn mein Programm als Bootprojekt lauft. Wenn ich einlogge und dann das Programm laufen lass, habe ich keine Probleme...
Ich arbeite mit der 750-880 und auch TCP_server3
 
Zurück
Oben