Die Scheisse geht net!
Generell ist es sinnvoll alle Systemcalls auf Fehlschlagen zu testen und
errno auszuwerten, z.B. mit perror oder strerror. An strategisch günstigen
Stellen printfs einbauen, um einen Anhaltspunkt zu kriegen an welchen Stellen
das Programm zu spinnen beginnt.
Es compiliert nicht!
Windows:
- winsock.h drin? stdio.h drin? Etwaige andere Header?
- fehlen Header? Falls ja: sind es welche
hiervon?
- beim Linken wsock32.lib eingebunden?
UNIX:
- alle Header drin? (Siehe Manpages der verwendeten Befehle)
- Header auch in der richtigen Reihenfolge?
Windows: es compiliert, aber alle Socket-Befehle gehen nicht
Programm hängt und tut nichts mehr!
Vermutlich blockierender Systemcall. Am besten vor alles, das blockieren könnte
ein printf() setzen, evtl. dahinter auch um zu sehen, wann es geklappt hat. Kandidaten
dafür sind alle recv(), bei Server accept(), bei Client connect(). Dran denken,
daß printf-Ausgaben ohne '\n' nicht sofort auftauchen, sofern kein fflush(stdout)
folgt!
Programm empfängt Mist!
- Puffer richtig mit '\0' terminiert? CRLF richtig behandelt?
- Bei zeilenorientierten Protokollen mehrere Zeilen pro recv() behandelt?
- Vielleicht Mist gesendet? Mitsniffen!
Programm stürzt ab, Segmentation Fault.
- Puffer richtig dimensioniert? Über's Ende rausgeschrieben?
- Bei accept(), recvfrom() oder get*name() keinen Zeiger auf socklen_t übergeben?
- getxxxbyxxx() oder so fehlgeschlagen und NULL-Zeiger dereferenziert?
- Zu großen Puffer auf dem Stack reserviert? (mehr als ein Megabyte oder so)
select() macht Ärger!
- Höchsten Socket +1 übergeben?
- Nach jedem Aufruf die Sets und den Timeout neu belegt?
- Die Sets an der richtigen Stelle übergeben?
- Die Extra-Seite zu select gelesen?
Client bleibt "kleben", Server lässt nicht los
- Bei fork() an close() in allen Prozessen gedacht?
- Irgendwelche vergessenen Aufrufe von dup(), dup2() oder fdopen()?
Beim Verbinden bzw. beim Starten eines Servers stimmen die Ports nicht
- Dann fehlt ein Aufruf von htons() oder so.
Hat jemand noch einen neuen Fehler für mich? Dann
meldet euch bei mir!