[so] Intrebari Tema 5 async i/o Windows

Cosmin Ratiu cosminratiu at gmail.com
Fri Aug 7 19:42:03 EEST 2009


2009/8/7 Adrian Lascateu <adrian_lascateu at yahoo.com>

> Salut!
>
> Am si eu nevoie de putin ajutor intrucat am intalnit cateva probleme. O sa
> incerc sa le iau pe rand.
>
> 1)  Daca testez cu generatorul de pe site atunci incepe sa piuie daca
> afisez iar daca nu afisez, tot se duce in balarii. Daca pun un generator de
> caractere (buffer[i] = rand()%63+48 sa zicem) atunci marea majoritate trec.


Multe din caracterele alea sunt netiparibile, asa cum zice Daniel. Dar tema
nu ar trebui sa depinda de delay-uri. Daca odata merge si alta data nu,
inseamna ca ceva nu e bine. Singura problema pe care o stiu e cea scrisa cu
rosu in enuntul temei, la iesirea clientului.

2) La testele de WRITE am observat ca mesajul meu de 1MB de la client vine
> in mai multe bucati de 512 la server (bytes transf 512 dar strlen arata
> 513!) asa ca la fiecare pun un '\0' pe ultima poz (512). Problema mare este
> ca am dat peste un printf fantoma:
>
> //printf("Spotted message |%s| from %d %d %d tip %d\n",
> oc->DataBuf.buf,oc->socket,bytes,index,oc->tip);
>   oc->DataBuf.buf[bytes] = '\0';
>
> Daca il pun, atunci bucatile se pun cap la cap cum trebuie. Daca nu-l pun
> atunci mai pune inca un caracter (totalul la 64KB ajunge 65537, ca si cum ar
> ignora '\0') si totul se strica.
>

Aici Daniel are dreptate: daca folosesti functii 'inteligente', care
transforma EOL-urile, o sa schimbi datele.

Alternativ, ai putea sa nu mai testezi cu ./generate si sa rulezi manual
cateva comenzi pe fisiere generate de tine, text sau nu. Eu copiam filme de
700 MB de pe o partitie pe alta.



> 3) Si bineinteles eterna "da' pa' windows de ce merge?" Tot ce am testat pe
> windows (cmd simplu, nu cygwin) merge in toate combinatiile posibile. In
> cygwin, cateodata unele teste merg, altadata nu merg (in special 22,23...).
>
> Orice idei sunt binevenite ca eu nu mai stiu ce sa fac :D
>

La testele 23/24, output-ul unui client e trimis printr-un pipe la alt
client si din cauza asta datele se pot fragmenta (adica sa vina in bucati de
cativa bytes in loc de fix cat buffer ai in client). Chestia asta poate
expune niste race-uri in server.

PS: cititi mail-ul asta trimis de mine mai demult
http://cursuri.cs.pub.ro/pipermail/so/2007-February/008966.html si mail-ul
urmator pentru a evita greselile comune care se pot face :).

Cosmin.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090807/f38d7392/attachment.htm>


More information about the so mailing list