Avanti-cl mit Delphi - ???
Thomas Berger
ThB at gymel.com
Mo Jun 3 14:27:51 CEST 2002
Liebe Frau Koczian, lieber Herr Bachschneider,
> >Es ist neulich schon enormer Schaden angerichtet worden, weil
> >die Endesequenz von "AVANTI:EOR\n" auf "\nAVANTI:EOR\n"
> >geaendert wurde,
>
> Das Problem war doch, dass der Systemdienst nur "AVANTI:EOR" ohne das "\n"
> _dahinter_ geschickt hat!
Das war eigentlich ein anderes Problem (und bestand fuer die Nicht-
Systemdienstvariante und avanti-x ja auch nicht so).
Der von mir oben beschriebene "Schaden" kam zustande durch eine
Pseudo-Loesung des Problems, dass "AVANTI:EOR" an die letzte Zeile
der Ausgabe geklebt war, wenn
- (behebbar) die Parameter die letzte Zeile nicht abschlossen
- (nicht behhebbar) avanti crashte und ausnahmsweise eine Fehlermeldung
ausgab
d.h. man konnte sich nicht darauf verlassen, dass "AVANTI:EOR"
am Anfang einer Zeile stand. Natuerlich wurde das besonders
kritisch dadurch, dass man sich leider nicht darauf verlassen kann,
dass "AVANTI:EOR" am Ende einer Zeile fuer sich steht.
> Ausgangspunkt dieser Diskussion war eine etwas andere Situation: avanti-cl
> sendet doch von sich aus gar kein Ende-Signal (s. Mail von H. Hoeppner von
> heute vormittag: "Bis jetzt ist es so, dass avanti-cl einfach stirbt. ").
> Herr Schmid hat standardmaessig ein "write 'AVANTI:EOR'" an seine Jobs
> angehaengt, ob mit oder ohne newline, weiss ich nicht. Ich habe das fuer
> mein Delphi-Programm erst einmal uebernommen, aber auf dieses Verfahren
> bezog sich meine Nachfrage.
>
> Ich koennte mir im Prinzip schon vorstellen, dass avanti-cl weiterhin gar
> nichts als Ende-Zeichen schickt und das aufrufende Programm sich darum
> kuemmern muss. Dann entsteht die neue Frage, wie es das am geschicktesten
> macht, aber das muss dann auch nicht fuer alle gleich sein.
und Herr Bachschneider schrieb:
> Ich weiß es schlicht und ergreifend nicht. Aus meiner Erinnerung gibt es
> unter Python
> eine Abstraktion für Sockets mit der man Sockets wie Files behandeln kann.
> Damit wäre EOF genau richtig
Nur scheinbar, weil avanti-cl (genau wie avanti-w als Systemdienst)
die Ausgabe schliesst, sobald es etwas getan hat. Und dies wird
empfaengerseitig sowieso als EOF erkannt. "Normalverhalten" der
avanti's ist eigentlich aber immer noch, dass mehrere Kommunikations-
schritte ueber eine einzelne Verbindung abgewickelt werden koennen,
insofern ist "AVANTI:EOR" in einem gewissen Sinne von feinerer
Granularitaet als EOF und nicht ueberfluessig bzw. durch EOF
ersetzbar.
Aus Gruenden der Abstraktion (eigene Software sollte tunlichst nicht
darauf getunt werden muessen, ob avanti-x, avanti-w, avntserv,
avanti-cl,
...) am anderen Ende haengt, sollte sich auch avanti-cl nicht ohne
Not anders verhalten als die anderen avanti's.
> Die Pipes, die popen3() erzeugt, scheinen damit sowieso kein Problem zu
> haben, aus ihnen kann man mit read() ohne Parameter alles auf einmal lesen.
> Ich weiss allerdings noch nicht, ob das auch mit wirklich grossen Downloads
> funktioniert.
Sie koennen nur das lesen, was zum Zeitpunkt des Lesens angekommen ist.
Insofern denke ich, dass Sie doch ein Problem haben (obwohl ich Delphi
nicht kenne).
viele Gruesse
Thomas Berger
Mehr Informationen über die Mailingliste Allegro