pelzfrucht
Goto Top

Select() bei Benutzung von socket - Programm stoppt

Moin,

zu sehr später Jahresstund noch ein Hilferuf von mir face-smile

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()

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 face-smile

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.

Content-ID: 359545

Url: https://administrator.de/contentid/359545

Ausgedruckt am: 21.11.2024 um 20:11 Uhr

pelzfrucht
pelzfrucht 02.01.2018 um 14:16:02 Uhr
Goto Top
Moin,

Kann mir keiner helfen?

Ich kann nicht weiter lernen und arbeiten ohne eure Hilfe face-sad

Lg
pelzfrucht
pelzfrucht
pelzfrucht 02.01.2018 um 23:16:57 Uhr
Goto Top
Ich konnte einen Teilerfolg verbuchen.
Der Code haperte daran, dass "high_sock" die Zuweisung des Wertes vom "Empfangssocket" fehlte.
Nun kann ich mich mit dem Server verbinden, und es geht weiter.

Jetzige Ausgabe:

[OK] socket()
[DEBUG] high_sock = 3
[OK] bind()
[OK] listen()
[DEBUG] select() ...
[DEBUG] ready = 1
Speicherzugriffsfehler

Dann tüftel ich mal weiter. Der Quellcode im Startpost wurde aktualisiert.
Falls jemand sich doch noch entscheiden sollte zu helfen, gerne.

Grüße
pelzfrucht
pelzfrucht
pelzfrucht 02.01.2018, aktualisiert am 03.01.2018 um 15:53:38 Uhr
Goto Top
Moin,

Probleme gelöst.
Schuld an der Speicherschutzverletzung war das übergeben des *Wertes* statt der *Adresse* der Variablen an die Funktion vbd_accept. Ein *&* vor beiden Variablenamen hats gerichtet.

"Vielen Dank" für eure "Hilfe".
Zum wiederholten Male face-sad

LG
pelzfrucht