Hallo liebe Forenbesucher,
wie im Titel schon erwähnt hätte ich eine Frage zur Socket Programmierung.
Soweit ich weiß, blockiert der accept Befehl solange bis ein neuer Client sich verbindet. Um das zu umgehen, also das Blocken zu verhindern, war es meine Idee diese durch select zu realisieren.
Also meine Idee ist es durch select zu schauen ob neue Clients sich verbinden wollen. Falls das zutrifft also wenn ein Client sich verbindet, werden die Daten (vorallem file descriptor) des Clients in einer Struktur gespeichert und ein neuer Thread erzeugt.
Falls doch kein neuer Client versucht sich zu verbinden, soll ein Thread laufen (also ein bereits verbundener Client in einem Thread abgearbeitet werden).
Ich hätte ungefähr an sowas gedacht:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | while (1){ FD_ZERO(&new_client); FD_SET (&fd_accept_new, &new_client); if((fd_accept_new = accept(fd_socket,.....)) < 0) perror(...) if((select(max_fd_select + 1, &new_client,... )) < NULL) perrer("Select"); if(FD_ISSET(fd_accept_new, &new_client)){ //den neuen file descriptor in eine Struktur speichern //z.B: SocketFd_client[0].fd = fd_accept_new } else Pthread_create(&tid, Null, &irgendwas, (void *) SocketFd_client) } |
Ich will im Grunde schauen, ob ein neuer Client sich verbinden will, wenn ja will ich sein File Deskriptor in eine Client-Struktur speichern und einen neuen Thread starten, wenn nicht sollen die Threads laufen, welche die Clients aberbeiten.
Irgendwie stehe ich voll am Schlauch und weiß nicht wie ich die Sache am besten angehen soll, ich habe irgendwie den Überblick verloren und hoffe ihr könnt mir da weiter helfen.
Lg