000
23.05.2008, 10:57 Uhr
soUrcerer
|
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:
Code: |
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 -- red-cat networks |