Threads und Sockets



  • Hallo,
    ich habe wiedermal ein kleines Problem und kriegs nicht hin.
    Und zwar starte ich einen Thread (pthread_create(...) ) und will dann in dem Thread eine Socketverbindung oeffnen. Ich bekomme beim Ausfuehren meines Programms immer die Meldung
    bind: Address already in use
    Ich habe die Portnummer des sockets schon ein paarmal geaendert, bekomme aber immer die selbe Meldung.
    Gibt es da prinzipiell Probleme wenn man in einem Thread eine Socketverbindung oeffnen will?
    Ohne den Thread hatte die Socketverbindung naemlich funktioniert. Leider brauche ich den Thread, weil ich sozusagen pollen muss und auf Daten staendig warten muss. Kann man das sonst anders, also ohne Thread, machen?
    Kenne mich leider mit Threads und mit Sockets nicht wirklich aus. Vielleicht kann mir ja jemand weiterhelfen.
    Vielen, vielen Dank schon mal.
    Viele Grueße
    Verena



  • Dieser Fehler tritt eigentlich auf, wenn du, kurz nachdem du deinen Server beendet hast, ihn neustartest, da der Port nicht sofort wieder benutzt werden kann. Entweder wartest du, bis er wieder frei ist oder schaltest durch

    int bla = 1;
    int sock;
    
    /** bla bla */
    
    setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&bla,sizeof(int))
    

    sock ist das/der Socket, auf dem du "lauschst".

    die sofortige Neubenutzung ein.

    Mit den Pthreads hat das nichts zu tun. Die funktionieren wunderbar mit Sockets und sind ja eigentlich auch für Serveranwendungen gedacht.



  • Hmm, hab folgendes bei mir schon so stehen:

    int reuse = 1;
    int sock_fd;
    setsockopt (sock_fd, SOL_SOCKET, SO_REUSEADDR, (char 😉 &reuse, sizeof (reuse));

    Gruß
    Verena



  • Ah, versuchst du vielleicht in 2 Threads (oder einem Thread und in der main() Funktion) bind() für das gleiche Socket zu beuntzen. Poste doch mal etwas vom Code.



  • Oje, oje, das wars. Ich hatte ja vorher alles in der main und hab dann den Thread eingebaut. Das ist wieder so typisch fuer mich. Hab dann 2 mal das Socket gestartet; einmal in der main und einmal im Thread.
    Vielen, vielen Dank. Ich suche dann immer ewig und meist an der falschen Stelle.
    Also nochmal Danke.
    Viele Grueße
    Verena


Anmelden zum Antworten