> P1, P2 = peer 1, 2
>
> P1: write (100 bytes).
> P1: write (150 bytes).
> P2: read (max 200);
>
> Conform acelui RFC, spune ca datele sunt date catre utilizator, de catre
> stiva, la primirea flagului PUSH. Intrebarea vine: la fiecare write (am
> cautat in manual la send si nu se specifica daca se poate controla
> PUSH, deci o face automat stiva TCP/IP) stiva, dupa transmisia celor
> 100byes, activeaza PUSH? Adica P2 va primi PUSH dupa cei 100byes si
> inca un PUSH dupa cei 150? Cum va reactiona read ();? Va citi 200
> bytes: 100 din primul write si 100 din cel de-al doilea? Sau stiva se
> asigura ca primeste cei 100 la un read si urmatorii 150 la un alt read?
La write, google for Nagle Algorithm, man 7 tcp /TCP_NODELAY.
read, daca se apeleaza, intoarce ce e in buffer pana atunci. Tu poti sa
faci read() pe un buffer de 10.0000 bytes si sa-ti intoarca si 1 byte,
daca doar atat a citit (teoretic, cel putin).
> Se poate intampla ca de la primul write sa primesc mai putin de 100
> bytes pe available, la read, necesand un al doilea read pentru a citi
> in totalitate cei 100bytes de la primul write?
Da.
Daca vrei sa citesti un "record", trebuie sa apelezi read() de cate ori
e necesar, pana ai citit sizeof(record).
---
sofar = 0;
do {
r = read(.....);
if (r > 0)
sofar += r;
if ((r == -1) && (errno != EINTR))
eroare....
if (r == 0)
eof...
} while (sofar != toread);
---
> Claudiu Cismaru
Matei
PS: suntem offtopic.
---
Detalii despre listele noastre de mail: http://www.lug.ro/