Sockets - Programm bricht ab
-
Hallo erstmal,
ich bin leider brandneu bei C und weiß daher nicht, ob es dieses Problem schon gab (Oder besser, diese Art Problem). Ich habe mal versucht unter Debian mit gcc ein kleines Programm zu kompilieren, dass aber beim Ausführen an einer best. Stelle abbricht (Nach dem Verbinden durch einen Client)
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int s = -1; struct sockaddr_in serverAddr; inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr); serverAddr.sin_port = htons(9002); serverAddr.sin_family = AF_INET; s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { printf("socket() failed\n"); return 2; } if (bind(s, (struct sockaddr*)(&serverAddr), sizeof(serverAddr)) == -1) { printf("bind() failed\n"); return 2; } if (listen(s, 3) == -1) { printf("listen() failed\n"); return 2; } struct sockaddr_in client; int cliSize; int c; cliSize = sizeof(client); c = accept(s, (struct sockaddr *)(&client), &cliSize); printf("Verbindung von %s\n", inet_ntoa(client.sin_addr)); char message[] = "Hat funktioniert\r\n"; int bytesSent = send(s, message, strlen(message), 0); printf(bytesSent + " bytes sent"); return 0; if (bytesSent == -1) { printf("send() failed"); return 2; } else { printf(bytesSent + " bytes sent"); } close(c); } }
Das Problem ist, dass das Programm nach dem Senden von "Verbindung von..." nicht weitermacht. Selbst, wenn ich eine Ausgabe direkt im Anschluss mache, wird diese nicht mehr ausgegeben. Weiß da jemand weiter?
Ich habe diese Frage auch schon im Fachinformatiker-Forum gestellt, allerdings dort bislang keine Antwort erhalten.
-
Wieso benutzt du nicht den Debugger? Damit siehst du sofort, wo und warum das Program abbricht (hier wegen einem SIGPIPE).
Das liegt daran, dass du versuchst über den Socket s anstatt c zu senden.printf(bytesSent + " bytes sent") gibt übrigens ganz großen Mist (Zeigeraddition), wie du selbst sehen wirst.
-
Debugger? Gibt es das für die Console? Wie gesagt, das sind meine ersten bescheidenen Anfänge..
Zeigeraddtition? Nie gehört. Ich komme von PHP, da gibt es so etwas nicht
Werde ich mir aber ansehen.
EDIT: Das mit dem falschen Socket in send() hat funktioniert - Danke! Ich weiß nicht, warum mir das nicht aufgefallen ist..
-
Klar gibt es einen Debugger für die Konsole: gdb.
Hier ein Screenshot als Crashkurs.
Die drei Befehle start, continue und where reichen für die meisten Zwecke aus. Die relevante Stelle der Ausgabe ist die Zeilenangabe nach test.c (Z.43).
-
Ah - super. Danke, das werde ich gleich mal testen.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.