Hey mensen,

Ik heb nu een C Programma: http://pascal.signet.nl/chat.c, alleen de for loop ( de main loop, die for(;;) ) lijkt niet te werken!

Als ik de server start, en ik ga er naar toe met telnet, ik stop daarna de telnet client, krijg ik dit als output:


pascal# ./chat

Chat server> socket                     [  OK  ]
Chat server> fcntl                      [  OK  ]
Chat server> re-use                     [  OK  ]
Chat server> bind                       [  OK  ]
Chat server> listen                     [  OK  ]
Chat server> sigaction                  [  OK  ]
Chat server> starting main loop         [  OK  ]
start reset_input
-->-1<--
einde reset_input
Chat server> Connection from    [ 80.255.240.1 ]         on socket      [ 4 ]
0 ------FILEDISCRIPTOR-----> 4
recv: Resource temporarily unavailable
1 ------FILEDISCRIPTOR-----> 0
2 ------FILEDISCRIPTOR-----> 0
3 ------FILEDISCRIPTOR-----> 0
4 ------FILEDISCRIPTOR-----> 0
5 ------FILEDISCRIPTOR-----> 0
6 ------FILEDISCRIPTOR-----> 0
7 ------FILEDISCRIPTOR-----> 0
8 ------FILEDISCRIPTOR-----> 0
9 ------FILEDISCRIPTOR-----> 0


Wat het moet doen is tot nu toe gewoon maximaal 10 mensen in de chat toelaten, het wordt uiteindelijk een chat server. Het moet nu mensen naar de chat toe kunnen laten connecten, en ook weten wanneer ze ophangen. Als ze hebben opgehangen moet dus de user array bijgewerkt worden, maar dit wil allemaal niet.

Ik hoop dat ik duidelijk ben.
De printf's zijn allemaal nu trouwens nog als test, zodat ik precies weet wat er gebeurt.
Weet iemand wat ik fout doe?


MvG,
Niek van der Steen.
om te beginnen... waarom niet while (true) ?
wat voor verschil maakt dat uit?

[edit]werkt ook niet...[/edit]
[edit]dat document dat daar staat wort automatisch verranderd naar de "actueelste" versie als ik een update uitvoer[/edit]
Hm, ik heb de engelse versie van die tutorial hier uitgeprint liggen, en er staat dat je ipv select ook fcntl() kan gebruiken (zoals ik dus heb gedaan) om de BLOCKING mode om te zetten naar de NONBLOCKING

staat bij parragraaf 6.1
select() is beter
hm, maar dan is heel die array overbodig zo te zien, en moet alles in een file descriptor set?
jup, je kan de basis direct overnemen :P
k zou wel even beetje fatsoeneren en door kijken wat t allemaal precies doet... "kennismaken met de code" :P
ja snap ik, ik ga ook zeker niet klakkeloos overnemen, dat haat ik ;-)
niek schreef op 20.12.2006 19:08
ja snap ik, ik ga ook zeker niet klakkeloos overnemen, dat haat ik ;-)


nope, zeker niet met C(++) code, straks heb je overflow gaten :P
Maar je zegt dat fcntl "niet zo netjes is". Maar maakt het qua resultaat wat uit? want wat ik me afvraag is: "Waarom werkt het NU niet, en dadelijk met select() wel?"

Reageren