[so] [TEMA 5] Operatii asincrone pe server
Bogdan Doinea
dcbogdan07 at gmail.com
Sun Jun 1 12:42:03 EEST 2008
Salut!
Din cate am inteles eu din contextul temei, eu trebuie sa fac totul asincron
pe server, adica fara sa astept nimic.
1) asta inseamna ca trebuie sa folosesc fcntl ca sa fac inclusiv socketii pe
car asculti non-blocanti?
2) cand fac operatia de recv pe socket in server, imi este garantat ca daca
clientul a trimis 100 B, atunci si serverul ii va primi pe toti 100 intr-un
singur recv (avand in vedere ca fctionarea este pe localhost si nu pe o
retea reala)
3) legat de intrebarea 2: In implementarea protocolului meu, eu primesc
comanda write (spre ex) de la client la server, primesc de la server un
raspuns care imi spune daca se poate executa comanda sau a aparut o eroare
si apoi trimit de la client datele ce trebuiesc scrise de server in fisier.
Dupa ce serverul a primit datele si le-a scris in fisier, el va da un ack
clientului pentru ca acesta sa poata iesi. *
Intebarea 3* este de fapt: daca eu nu reusesc sa primesc toti cei 100 de
bytes pe care clientul mi-i trimite, si primesc sa zicem: doar 50 de B; de
unde stie serverul ca ar trebui sa mai primeasca inca 50 inainte sa trimita
clientului ack, ca acesta sa poata iesi. Exista mai multe mecanisme prin
care as putea sa fac recv-ul sa astepte pana primeste absolut totul (flaguri
recv, while();), insa astfel as cam bloca serverul, iar in textul temei
scrie ca serverul nu se poate bloca decat la wait(). So.. ce fac?. cum imi
dau seama in server ca nu am primit toate datele trimise intr-un singur
recv?
--
Bogdan Doinea
CCNA Instructor
www.ccna.ro
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/so/attachments/20080601/be2ed1c8/attachment.html
More information about the so
mailing list