[C] Problem mit Sockets und Threads

hebru

Grünschnabel
hi zusammen, wie der titel sagt habe ich ein problem mit meinen sockets und threads. ich habe erstmal 2 pthreads. der eine oeffnet einen server socket und wartet auf nachrichten. der andere thread wartet auf tasteneingaben, so dass ich das programm auch dann beenden kann wenn der server thread gerade in einem accept() blockiert.

so sieht das ganze pseudo code maessig aus:

serverthread(){
}

keythread(){
}

main(){

fd = server_init(port)
pthread_create(serverthread, fd)
pthread_create(keythread)

pthread_join(keythread)

close(fd)
printf(test)
return
}

jetzt habe ich den seltsamen fehler das er nach dem betätigen der beenden taste bis zum printf(test) kommt da aber dann haengt. ich habe testweise nach dem close() mal den server nochmal auf dem selben port gestartet, worauf ich die meldung vom bind() bekomme "adress already in use". wenn ich das mache beendet er dann aber.

es liegt also irgendwie daran das der socket noch nicht vernueftig geschlossen ist, das er nicht beendet.

habt ihr vielleicht eine idee woran das liegen kann?

vielen dank schonmal im vorraus


EDIT: also das problem hat sich erledigt. er beendet jetzt. allerdings bleibt das problem das wenn ich beende und obwohl ich ordnungsgemaess das socket mit close() geschlossen habe, dass er dann beim bind() kurz darauf meint das die adresse already in use sei.

kann es sein das wenn der thread gerade im accept() haengt das ich dann das socket nicht mit close() aus der main schliessen kann?

daanke
 
Zuletzt bearbeitet:
Hi,

du kämst vielleicht besser, wenn du anstatt der komplizierten Threads die select()-Funktion verwenden würdest, damit kannst du das gleiche Ergebnis vielleicht etwas einfacher erreichen. Mehr dazu gibts auch hier: http://www.c-worker.ch

Gruß
cesupa
 
Zurück