Select() bei Benutzung von socket - Programm stoppt
Moin,
zu sehr später Jahresstund noch ein Hilferuf von mir
Ich übe mich gerade mit select(), und halte mich dabei hauptsächlich an diese Referenz.
Copy'n'Paste des des "/* multi_server.c */" Beispiel funktioniert. Ich kann mich mittels NetCat zum Server verbinden und erhalte das Gesendete in der Serveranwendung auch auf dem Bildschirm.
Jetzt hab ich mich dran gemacht, mit dem gelernten Wissen selbstständig einen "Echo" Server zu schreiben, scheiter aber schon ziemlich am Anfang.
Quelltext:
entfernt
Ich habe zur Diagnose einige Anweisungen aus main() in eigenständige Funktionen ausgeglidert (z.B. vbd_accept(...), oder meine selbstgeschriebene Anweisungen durch die Funktionen in der Anleitung ersetzt (bei der ich ja weiß dass es funktioniert.) (z.B. create_socket(...).
Im Original sah der Quelltext ein ganzes Stück ordentlicher aus. Ich hoffe, gehe aber davon aus, ich habe während meiner "Diagnose Maßnahmen" nicht andere, neue Fehler in den Quelltext eingebaut.
Ich starte das Programm (unter Linux) und erhalte folgende Ausgabe:
Und dannach geht es nicht weiter.
Unter Mac OS X erhalte ich mit exakt dem gleichen Source Code
noch zusätzlich
weshalb ich vermute dass das listen() nicht blockiert, Linux sich jedoch (erfahrungsgemäß) etwas störrisch bei der Ausgabe von Texten auf dem Terminal gibt, auch wenn das Programm erst an einer späteren Stelle steht.
Verbinde ich mich mit NetCat, bleibt die Verbindung zwar bestehen - aber es passiert nichts weiter in der "Server Konsole". Auch wenn ich einen Text in NetCat schreibe und abschicke.
Ich vermute den Fehler in den FD_SET oder der select() Anweisung, bzw. der von mir geschriebenen Programmlogik. Komme aber nicht dahinter.
Ich bin mir sicher, dass es irgendwo ziemlich blöd verhadert ist, und ich es nur nicht sehe.
Ich möchte euch im Vorraus vielmals Danken dass ihr euch mit meinem Anliegen beschäftigt!
Guten Rutsch ins Neue Jahr
Grüße
pelzfrucht
Edit: Kleinere Formulierungsverbesserungen vorgenommen.
Edit 2: Quelltext entfernt. (Aufgrund der Länge von ~ 190 Zeilen?) hatte eh keiner Bock zu helfen. Ich konnte das Problem schlussendlich selbst entdecken.
zu sehr später Jahresstund noch ein Hilferuf von mir
Ich übe mich gerade mit select(), und halte mich dabei hauptsächlich an diese Referenz.
Copy'n'Paste des des "/* multi_server.c */" Beispiel funktioniert. Ich kann mich mittels NetCat zum Server verbinden und erhalte das Gesendete in der Serveranwendung auch auf dem Bildschirm.
Jetzt hab ich mich dran gemacht, mit dem gelernten Wissen selbstständig einen "Echo" Server zu schreiben, scheiter aber schon ziemlich am Anfang.
Quelltext:
entfernt
Ich habe zur Diagnose einige Anweisungen aus main() in eigenständige Funktionen ausgeglidert (z.B. vbd_accept(...), oder meine selbstgeschriebene Anweisungen durch die Funktionen in der Anleitung ersetzt (bei der ich ja weiß dass es funktioniert.) (z.B. create_socket(...).
Im Original sah der Quelltext ein ganzes Stück ordentlicher aus. Ich hoffe, gehe aber davon aus, ich habe während meiner "Diagnose Maßnahmen" nicht andere, neue Fehler in den Quelltext eingebaut.
Ich starte das Programm (unter Linux) und erhalte folgende Ausgabe:
[OK] socket()
[OK] bind()
[OK] listen()
[OK] bind()
[OK] listen()
Und dannach geht es nicht weiter.
Unter Mac OS X erhalte ich mit exakt dem gleichen Source Code
noch zusätzlich
[DEBUG] select() ...
weshalb ich vermute dass das listen() nicht blockiert, Linux sich jedoch (erfahrungsgemäß) etwas störrisch bei der Ausgabe von Texten auf dem Terminal gibt, auch wenn das Programm erst an einer späteren Stelle steht.
Verbinde ich mich mit NetCat, bleibt die Verbindung zwar bestehen - aber es passiert nichts weiter in der "Server Konsole". Auch wenn ich einen Text in NetCat schreibe und abschicke.
Ich vermute den Fehler in den FD_SET oder der select() Anweisung, bzw. der von mir geschriebenen Programmlogik. Komme aber nicht dahinter.
Ich bin mir sicher, dass es irgendwo ziemlich blöd verhadert ist, und ich es nur nicht sehe.
Ich möchte euch im Vorraus vielmals Danken dass ihr euch mit meinem Anliegen beschäftigt!
Guten Rutsch ins Neue Jahr
Grüße
pelzfrucht
Edit: Kleinere Formulierungsverbesserungen vorgenommen.
Edit 2: Quelltext entfernt. (Aufgrund der Länge von ~ 190 Zeilen?) hatte eh keiner Bock zu helfen. Ich konnte das Problem schlussendlich selbst entdecken.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 359545
Url: https://administrator.de/contentid/359545
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
3 Kommentare
Neuester Kommentar