|
| Sockets i C Fra : Kim Ingemann |
Dato : 06-08-02 21:34 |
|
Hej.
Jeg er igang med at lave en server, der kan kan have flere klienter
forbundet på samme tid. Disse klienter kan derfor skrive til serveren og
få svar igen. Det er jo nok ikke første gang at det er blevet lavet. :)
Jeg har dog et problem. Jeg kan sagtens smide tekst i hovedet på serveren
og få response fra serveren. Jeg kan bare ikke få den til at forbinde
de forskellige klienters input. De sidder alle delt op fork().
Hvad skal jeg gøre?
Den skal have samme opbygning som de fleste chat-servere man ser i dag,
fx. ircd.
--
Mvh. Kim Ingemann
| |
Kent Friis (06-08-2002)
| Kommentar Fra : Kent Friis |
Dato : 06-08-02 22:18 |
|
Den Tue, 06 Aug 2002 22:33:46 +0200 skrev Kim Ingemann:
>Hej.
>
>Jeg er igang med at lave en server, der kan kan have flere klienter
>forbundet på samme tid. Disse klienter kan derfor skrive til serveren og
>få svar igen. Det er jo nok ikke første gang at det er blevet lavet. :)
>
>Jeg har dog et problem. Jeg kan sagtens smide tekst i hovedet på serveren
>og få response fra serveren. Jeg kan bare ikke få den til at forbinde
>de forskellige klienters input. De sidder alle delt op fork().
>
>Hvad skal jeg gøre?
>
>Den skal have samme opbygning som de fleste chat-servere man ser i dag,
>fx. ircd.
Umiddelbart er der to muligheder:
Uden fork():
Brug i stedet select() til at fortælle når der er data på dine file
descriptors, og sørg for at sende det ud til de andre klienter.
Med fork():
Med separate processer er du nødt til at have en måde for dem at
kommunikere internt, fx. pipes eller shared memory. Pipes vil nok give
nøjagtigt samme resultat som uden fork(), nemlig at du skal have en
select() til at chekce dine pipes. Hvis du bruger shared memory, så
kig på shmat() og shmdt().
Umiddelbart vil jeg nok anbefale at forsøge uden fork(), det er nok
lettere at overskue.
Mvh
Kent
--
IE is the only thing capable of making Netscape look good
- D. Spider in comp.os.linux.advocacy
| |
Kim Ingemann (07-08-2002)
| Kommentar Fra : Kim Ingemann |
Dato : 07-08-02 20:47 |
|
On Tue, 06 Aug 2002 23:17:48 +0200, Kent Friis wrote:
> Umiddelbart er der to muligheder:
>
> Uden fork():
>
> Brug i stedet select() til at fortælle når der er data på dine file
> descriptors, og sørg for at sende det ud til de andre klienter.
>
> Med fork():
>
> Med separate processer er du nødt til at have en måde for dem at
> kommunikere internt, fx. pipes eller shared memory. Pipes vil nok give
> nøjagtigt samme resultat som uden fork(), nemlig at du skal have en
> select() til at chekce dine pipes. Hvis du bruger shared memory, så
> kig på shmat() og shmdt().
>
> Umiddelbart vil jeg nok anbefale at forsøge uden fork(), det er nok
> lettere at overskue.
>
> Mvh
> Kent
Jeg siger mange tak. Jeg prøvede lidt af hvert og fandt faktisk ud af en
måde at behandle sockets på vha. select(). Det virker som det skal nu.
--
Mvh. Kim Ingemann
| |
|
|