Ik ben een server applicatie aan het bouwen die sockets afhandelt. In eerste instantie had ik een “klassieke” opzet met accept() en dan een fork. De bleek echter niet helemaal te werken. Daarom maak ik nu gebruik van select(). Als basis hiervoor heb ik gebruik gemaakt van het chatserver voorbeeld van beej:
http://www.ecst.csuchico....de/net/html/advanced.html
Het nadeel van deze aanpak is echter dat hij maar met maximaal 1 socket tegelijk bezig kan zijn. De server applicatie die ik ga bouwen kan echter vrij lang bezig zijn met de inkomende data, daarom wil ik hem ook laten fork-en nadat hij de data heeft gelezen van de socket.
Bij de opzet met accept worden na het forken gelijk een aantal sockets afgesloten: de parent sluit de nieuwe socket, de child de listener socket. Ook heb je nog een sigint_handler die beide sockets afsluit. Maar hoe zit dat nu bij select() ? Welke sockets moet ik daar afsluiten in de parent (volgens mij geen een)? En welke moet ik afsluiten in de child (volgens mij allemaal, de child exit() namelijk als hij klaar is met het verwerk van de data)?
Nu is mijn vraag: Moet ik idd sockets gaan afsluiten? Zo ja welke en wanneer?
En: Als ik sockets moet afsluiten, waar haal ik de fd’s vandaan? Ze staan in fd_set, maar ik ken maar 4 functies daar voor (FD_ZERO, FD_SET, FD_ISSET en FD_CLR).
Ik heb zowel hier als op google al gezocht, maar kon niets vinden vinden over fork-en in select() implementaties.
http://www.ecst.csuchico....de/net/html/advanced.html
Het nadeel van deze aanpak is echter dat hij maar met maximaal 1 socket tegelijk bezig kan zijn. De server applicatie die ik ga bouwen kan echter vrij lang bezig zijn met de inkomende data, daarom wil ik hem ook laten fork-en nadat hij de data heeft gelezen van de socket.
Bij de opzet met accept worden na het forken gelijk een aantal sockets afgesloten: de parent sluit de nieuwe socket, de child de listener socket. Ook heb je nog een sigint_handler die beide sockets afsluit. Maar hoe zit dat nu bij select() ? Welke sockets moet ik daar afsluiten in de parent (volgens mij geen een)? En welke moet ik afsluiten in de child (volgens mij allemaal, de child exit() namelijk als hij klaar is met het verwerk van de data)?
Nu is mijn vraag: Moet ik idd sockets gaan afsluiten? Zo ja welke en wanneer?
En: Als ik sockets moet afsluiten, waar haal ik de fd’s vandaan? Ze staan in fd_set, maar ik ken maar 4 functies daar voor (FD_ZERO, FD_SET, FD_ISSET en FD_CLR).
Ik heb zowel hier als op google al gezocht, maar kon niets vinden vinden over fork-en in select() implementaties.
Cupra Born