Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo werte Community,

ich habe ein merkwürdiges Problem mit einem unserer CGI Webservices, bin am Ende meiner Ideen angelangt und brauche dringend eure Hilfe.

Es ist in C geschrieben und lief eigentlich wunderbar. Bei uns in der Firmenumgebung läuft es nach wie vor, jedoch beim Kunden gibt es einen Fehler 500: Premature End Of Script headers.

Nun habe ich schon zwei Tage mit der Problemlösung verbracht und viel danach gegoogled und alls mögliche probiert, jedoch treibt mich der Fehler in den Wahnsinn.

Zunächst konnte ich den Fehler bei uns nicht einmal reproduzieren. Irgenwann habe ich dann mit provuzierten Fehlerausgaben (perror) und filedescriptoren (STDERR_FILENO) herumgespielt (geschlossen, umgeleitet, etc.), worauf hin ich auch irgenwann diesen 500er vom Server quittiert bekam.

Toll dachte ich, da hab ich die Lösung. Doch nach rekonstruktion des alten Quellcode und neuem kompilieren lief auch diese Binary (und auch andere definitv früher lauffähige Kompilate) nichtmehr; mit dem selben Fehler.

Dann habe ich weiter mit den Filedescriptoren herumgespiet und irgendwann, lief der Service dann bei uns wieder. Die Binarys hab ich zum Kunden geschickt, aber sie laufen dort auch nicht. Sogar der Code in der ursprünglichen Form (der anfangs lief, dann irgendwann nichtmehr) läuft jetzt wieder.

Ich kann mir nicht erklären, was da die Ursache ist... Frust.

Wie kann es sein, dass ein und der selbe Code mal läuft und mal nicht? Und warum läuft er hier vor Ort, aber beim Kunden nicht (selbe Zielplattform: Solaris 10)?

Server und Dienste habe ich mehrfach restartet (der Kunde auch).

Der Fehler deutet ja darauf hin, dass vor der Ausgabe der HTTP Header, irgendwas anderes ausgegeben wird. Aber was???

Ich habe den Service testweise mal auf ein Minimum reduziert:


int main (int argc, char **argv)

{

	printf("Content-Type: text/html\n\n");

	printf("test");

	return 0;

}

Auch dieses Codeschnippselchen lief dann nichtmehr. Nach Spielerei mit den Filedescriptoren, bekam ich es aber wieder zum laufen.

Kann es irgendwas mit Ausgaben zu tun haben, die in irgend einem Puffer hängengeblieben sind? Aber welche Puffer ist nach einem Reboot des Servers noch immer gefüllt?!

Habt ihr eine Idee? Eine Info, wie man sowas debuggen kann, wäre auch schon hilfreich.

Noch ein paar Infos zur Platform:

Solaris 10

Apache 2.0.59

Compiler gcc 3.4.6

Für eure Antworten bedanke ich mich jetzt schon

viele Grüsse

Michael

Geschrieben

Hallo leute,

es läuft wieder!

Ich vermute den Erfolg hat das Abschalten der Pufferung mittels setvbuf gebracht, ganz sicher bin ich aber erst, wenn ich nochmal mit dem Admin gesprochen habe.

Es könnte auch ein ganz banaler Konfigurationsfehler vorgelegen haben. Ich tippe aber eher auf den Puffer.

Danke für eure Anteilnahme,

viele Grüsse

Michael

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...